2013-06-23 42 views
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

你可以使用像這樣的使用LEFT聯接的查詢:

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