Oracle SQL中如何计算各类型0值占比并筛选占比超10%的结果
问题描述
现有如下结构的数据表:
| Type | Number |
|---|---|
| a | 1 |
| a | 0 |
| a | 1 |
| a | 1 |
| b | 0 |
| b | 1 |
| c | 1 |
| c | 1 |
需要完成两个操作:
- 计算每种
Type中数值为0的记录占比 - 筛选出占比超过10%的结果
预期输出结果如下:
| Type | Percentage of 0 |
|---|---|
| a | 25 |
| b | 50 |
解决方案(SQL实现)
SELECT Type, ROUND(COUNT(CASE WHEN Number = 0 THEN 1 END) * 100.0 / COUNT(*), 0) AS `Percentage of 0` FROM your_table_name GROUP BY Type HAVING ROUND(COUNT(CASE WHEN Number = 0 THEN 1 END) * 100.0 / COUNT(*), 0) > 10;
代码说明
COUNT(CASE WHEN Number = 0 THEN 1 END):统计每个Type分组下数值为0的记录数COUNT(*):统计每个Type分组的总记录数- 两者相乘以100后取整,得到0值的占比百分比
GROUP BY Type:按Type字段分组计算HAVING子句:筛选出占比超过10%的分组结果
内容的提问来源于stack exchange,提问作者slade
相关产品推荐
相关产品推荐

