为范围内的缺失值填充零

时间:2013-06-23 12:37:38

标签: sql postgresql

我想列出一个范围内的一组数字及其各自的数量, 但包括零,其中值不会出现在表格行中。

例如,

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查询直接执行此操作。

1 个答案:

答案 0 :(得分: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

请参阅小提琴here