计算所有值并计算一些值

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)

【讨论】:

以上是关于计算所有值并计算一些值的主要内容,如果未能解决你的问题,请参考以下文章

向 CLLocationDistance 添加一些计算

python 分词计算文档TF-IDF值并排序

选择最小日期值并计算日期值?

Swift 计算 UITextFields 的值并返回值

有没有办法引用前一行的计算值并在下一行的计算中使用它?

从各种标签中获取值并进行简单计算