sql - 通过查询查找百分比
问题描述
我有一个关于 SQL 的问题。
假设我有下表:
customerID | time_secs
-----------+-----------
1 | 5
1 | 4
1 | 2
2 | 1
2 | 3
3 | 6
3 | 8
我不能改变桌子的设计。我希望能够为每个唯一客户计算超过 3 的 time_secs 百分比。
例如,对于客户 1,它将是 (2 / 3) * 100 %。
到目前为止,我已经得到了这个:
SELECT customerID, COUNT(time_secs)
WHERE time_secs > 3
GROUP BY service
如何确保 time_secs 高于 3 并将其除以 time_secs 的总数,无论它是否高于 3。
谢谢。
解决方案
一个简单的方法是条件聚合:
select customerid,
avg(case when time_seconds > 3 then 100.0 else 0 end) as ratio
from t
group by customerid;
Theavg()
是一个方便的简写:
sum(case when time_seconds > 3 then 100.0 else 0 end) / count(*)
推荐阅读
- javascript - 如何正确序列化?按下时,Ajax 会更新对象 forloop 中 django upvote 按钮的所有实例
- javascript - 'state' 未定义 no-undef
- c++11 - 在我的 C++ 代码中未检测到我的第三个和第四个命令行参数
- ios - 如何在 iOS 中创建羽化的“圆圈擦除”动画?
- python - 如何从以“:”分隔的列表中取出一个单词?
- c - 仅使用算术运算符将美元金额排序为 20/10/5/1(无循环)
- javascript - Javascript Express App 中的最佳实践存储秘密
- javascript - 如何在谷歌应用脚本中全局访问 location.hash?
- node.js - 如何在 EJS 模板中使用包?
- django - 在 django-auth-registration 中获取“此字段为必填项”