我想列出一组在一定范围内的数字及其各自的计数,
但如果值不显示为表行,则包含零。
例如,

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查询直接完成这项工作。

最佳答案

您可以使用这样一个使用左联接的查询:

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

请参见fiddlehere

关于sql - 填充零以表示范围内的缺失值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17260802/

10-15 06:31