0

範囲内の一連の数値とそれぞれのカウントをリストしたいのですが、値が表の行に表示されない場合はゼロを含めます。

例えば、

create table score (
  n int
);
insert into score values (3);
insert into score values (1);
insert into score values (1);
insert into score values (5);
insert into score values (5);
insert into score values (5);

できます

select n, count(n) from score
group by n order by n;

与える

 n | count
---+-------
 1 |     2
 3 |     1
 5 |     3

しかし、代わりに私はしたいです

 n | count
---+-------
 0 |     0
 1 |     2
 2 |     0
 3 |     1
 4 |     0
 5 |     3

については承知しgenerate_series(0, max(n))ていますが、ここからどのように進めればよいかわかりません。

アプリケーション レベルでプログラムを使用してこれを行うこともできますが、私自身の教育のために、postgres クエリを使用して直接これを行う方法を学びたいと考えています。

4

1 に答える 1

4

LEFT JOIN を使用する次のようなクエリを使用できます。

SELECT
  series, COUNT(score.n)
FROM
  generate_series(0, (SELECT max(n) FROM score)) series
  LEFT JOIN score
  ON series=score.n
GROUP BY
  series

ここでフィドルを参照してください。

于 2013-06-23T12:41:40.810 に答える