如何在Oracle数据库中按自定义类别统计分组SQL结果?
Oracle SQL按自定义数值类别分组统计
针对你的需求,直接用CASE表达式对数值进行分类,再配合GROUP BY就能实现按0、>0、<0三个类别统计数量,避免按原始小数分组产生大量类别。
核心SQL语句
SELECT CASE WHEN VALUE = 0 THEN '0' WHEN VALUE > 0 THEN '>0' ELSE '<0' END AS Value, COUNT(*) AS TotalRepetitions FROM INSPECTIONS -- 可添加批次号过滤条件,例如 WHERE BATCH_NO = '指定批次号' GROUP BY CASE WHEN VALUE = 0 THEN '0' WHEN VALUE > 0 THEN '>0' ELSE '<0' END ORDER BY CASE Value WHEN '0' THEN 1 WHEN '>0' THEN 2 ELSE 3 END;
关键说明
- 类别映射:通过
CASE表达式将每个数值映射为对应的类别字符串,以此作为分组依据,替代原始的高精度小数。 - 精度兼容处理:如果存在因存储精度导致的近似0值(如
0.000000001或-0.000000001),可调整判断逻辑为ROUND(VALUE, 8) = 0,匹配保留8位小数后为0的数值。 - 结果排序:最后的
ORDER BY子句确保结果按0、>0、<0的顺序输出,与你期望的格式一致。
示例输出结果
| Value | TotalRepetitions |
|---|---|
| 0 | 12567 |
| >0 | 56795 |
| <0 | 23456 |
内容的提问来源于stack exchange,提问作者user22060295
相关产品推荐
相关产品推荐

