条件为“group By”的总行数

时间:2013-10-08 10:50:54

标签: sql postgresql

我在查询中遇到问题。我用postgresql。我需要得到总排,但条件为“分组依据”

table qwe 
----------------------------
TIPE   | VAL
----------------------------
1      | 2
2      | 3 
2      | 1
2      | 4
3      | 1
3      | 3

我需要的结果是

-------------------------
TIPE   | VAL | TOTAL TIPE
-------------------------
1      | 2   | 3
2      | 8   | 3
3      | 4   | 3

到目前为止我尝试过的查询

select tipe, sum(val), count(tipe) "total tipe" 
from qwe group by tipe order by tipe


-------------------------
TIPE   | VAL | TOTAL TIPE
-------------------------
1      | 2   | 1
2      | 8   | 3
3      | 4   | 2

4 个答案:

答案 0 :(得分:2)

你可以尝试这个:

select
    tipe, sum(val), count(tipe) over() as "total tipe"
from qwe
group by tipe
order by tipe

<强> sql fiddle demo

您可以看到,不是计算每个组中非空tipe条记录的数量,而是可以计算整个结果集中非空条带的数量 - 这就是您需要over()子句的原因。它被称为window functions

答案 1 :(得分:1)

这是一个奇怪的请求,但是,我建议您构建一个只返回表的count(tipe)然后加入该视图的视图?我没有测试过,但我很确定它会起作用。

答案 2 :(得分:1)

select
    tipe, sum(val), max(cnt) "total tipe"
from qwe
join (select count(distinct(tipe)) "cnt" from qwe) v on true
group by tipe
order by tipe

SQL-Fiddle demo

答案 3 :(得分:0)

您的查询提供了正确的输出。 对于所需的输出,我不知道为什么你需要将TOTAL TIPE值固定为3。

select tipe, sum(val), 3 as "total tipe" 
from qwe group by tipe order by tipe