首页 > 解决方案 > 通过查询查找百分比

问题描述

我有一个关于 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。

谢谢。

标签: sql

解决方案


一个简单的方法是条件聚合:

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(*)

推荐阅读