Oracle单SELECT语句中计算数据占比的方法咨询
单条SQL语句完成路线统计与占比计算
你可以通过聚合函数结合条件判断,用单条SELECT语句同时获取总路线数、符合条件的路线数以及占比,示例SQL如下:
SELECT COUNT(*) AS total_routes, SUM(CASE WHEN distance < 100 THEN 1 ELSE 0 END) AS valid_routes, ROUND( (SUM(CASE WHEN distance < 100 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2 ) AS percentage FROM routes;
语句说明:
COUNT(*):统计表中所有路线的总数量;SUM(CASE...):通过条件分支,对满足distance < 100的记录计数,符合条件的返回1,否则返回0,求和后得到符合条件的路线数;- 百分比计算中,乘以
100.0是为了将整数除法转换为浮点数运算,避免精度丢失;ROUND(..., 2)用于保留两位小数,你可以根据需求调整保留的小数位数。
如果你的数据库支持COUNT(IF(...))语法(比如MySQL),还可以使用更简洁的写法:
SELECT COUNT(*) AS total_routes, COUNT(IF(distance < 100, 1, NULL)) AS valid_routes, ROUND(COUNT(IF(distance < 100, 1, NULL)) * 100.0 / COUNT(*), 2) AS percentage FROM routes;
内容的提问来源于stack exchange,提问作者Mik
相关产品推荐
相关产品推荐

