Oracle SQL Developer中合并查询实现百分比计算并返回单行结果
解决Oracle SQL中百分比统计返回多行的问题
你可以通过两种方式实现单行返回的百分比计算:
方法1:使用双聚合子查询
直接将两个统计结果作为字段查询,借助DUAL表返回单行:
SELECT (SELECT COUNT(CUSTOMER_ID) FROM CUSTOMER WHERE MILES BETWEEN 3 AND 5) / (SELECT COUNT(*) FROM CUSTOMER) * 100 AS MILES_3_5_PERCENTAGE FROM DUAL;
方法2:使用CASE WHEN聚合(更高效)
通过一次表扫描完成统计,用CASE WHEN标记符合条件的记录,再计算占比:
SELECT ROUND( SUM(CASE WHEN MILES BETWEEN 3 AND 5 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2 -- 可选:保留两位小数 ) AS MILES_3_5_PERCENTAGE FROM CUSTOMER;
为什么之前返回20行?
你之前的写法大概率是将统计子查询放在SELECT列表中,但外层查询是FROM CUSTOMER,这会导致表中每一行都执行一次子查询计算,最终返回与总记录数相同的行数。上面两种方法都是聚合查询,会将整个表的结果汇总为单行输出。
内容的提问来源于stack exchange,提问作者user20638149
相关产品推荐
相关产品推荐

