计算所有值并计算一些值
Posted
技术标签:
【中文标题】计算所有值并计算一些值【英文标题】:Count of all and count some values 【发布时间】:2020-06-25 09:57:13 【问题描述】:我有这张桌子,
uid order_price
1 10
1 34
1 21
2 16
2 35
2 45
我想要表格中的uid计数和订单价格> = 30的uid计数,就像这样..
uid all above30
1 3 1
2 3 2
我这样做了:
select
uid,
count(1),
count(case when order_price >= 30 then 1 else 0 )
from table
group by uid;
但我得到了这个结果:
uid all above30
1 3 3
2 3 3
有什么问题?
【问题讨论】:
【参考方案1】:这个表达式:
count(case when order_price >= 30 then 1 else 0 end)
计算所有行,因为case
的所有分支都返回非null
值。
删除else
部分:
count(case when order_price >= 30 then 1 end)
请参阅demo。 结果:
> uid | all | above30
> --: | --: | ------:
> 1 | 3 | 1
> 2 | 3 | 2
【讨论】:
【参考方案2】:试试:
select
uid,
count(1),
sum(case when order_price >= 30 then 1 else 0 end)
from table
group by uid;
演示:
# select * from t;
uid | order_price
-----+-------------
1 | 10
1 | 34
1 | 21
2 | 16
2 | 35
2 | 45
(6 rows)
# select uid, count(1), sum(case when order_price >=30 then 1 else 0 end) from t group by uid order by uid;
uid | count | sum
-----+-------+-----
1 | 3 | 1
2 | 3 | 2
(2 rows)
【讨论】:
以上是关于计算所有值并计算一些值的主要内容,如果未能解决你的问题,请参考以下文章