我在查询中遇到问题。我用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
答案 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
答案 3 :(得分:0)
您的查询提供了正确的输出。
对于所需的输出,我不知道为什么你需要将TOTAL TIPE
值固定为3。
select tipe, sum(val), 3 as "total tipe"
from qwe group by tipe order by tipe