如何统计DAYS_LATE值在-364至-182间的行数并计算占比
DAYS_LATE区间统计及占比实现方案
核心思路
基于你现有的WORK_ORDER与PART关联查询,通过嵌套查询或CTE先获取全量数据,再用条件统计目标区间行数,最后计算占比。
实现代码
方式一:使用CTE(可读性更强)
WITH base_workorder_data AS ( -- 替换为你现有的关联WORK_ORDER和PART的查询语句 SELECT wo.*, p.*, DAYS_LATE, Late_Group_By FROM WORK_ORDER wo JOIN PART p ON wo.part_id = p.part_id -- 若原查询有过滤条件,直接添加在这里 ) SELECT -- 统计DAYS_LATE在-364至-182区间的行数 COUNT(CASE WHEN DAYS_LATE BETWEEN -364 AND -182 THEN 1 END) AS target_row_count, -- 计算占总行数的百分比,保留2位小数 ROUND( COUNT(CASE WHEN DAYS_LATE BETWEEN -364 AND -182 THEN 1 END) * 100.0 / COUNT(*), 2 ) AS target_percentage FROM base_workorder_data;
方式二:使用子查询(更简洁)
SELECT COUNT(CASE WHEN DAYS_LATE BETWEEN -364 AND -182 THEN 1 END) AS target_row_count, ROUND( COUNT(CASE WHEN DAYS_LATE BETWEEN -364 AND -182 THEN 1 END) * 100.0 / COUNT(*), 2 ) AS target_percentage FROM ( -- 替换为你现有的关联WORK_ORDER和PART的查询语句 SELECT DAYS_LATE FROM WORK_ORDER wo JOIN PART p ON wo.part_id = p.part_id ) AS workorder_sub;
关键说明
CASE WHEN条件统计:仅对符合区间的行计数,不符合的行返回NULL,COUNT函数会自动忽略NULL值- 浮点运算:乘以
100.0确保计算时用浮点型,避免整数除法导致的精度丢失 - 精度控制:
ROUND函数的第二个参数可调整百分比的小数位数,按需修改即可
内容的提问来源于stack exchange,提问作者SQL
相关产品推荐
相关产品推荐

