如何用SQL按多阈值统计符合条件的行数及Check字段1的数量
多阈值统计SQL实现方案
方法一:构造阈值集合关联统计(推荐)
通过构造包含所有指定阈值的临时集合,再与原表关联后分组统计,这种写法简洁且易于扩展新阈值:
WITH thresholds AS ( SELECT 0 AS threshold UNION ALL SELECT 200 UNION ALL SELECT 400 UNION ALL SELECT 600 UNION ALL SELECT 800 UNION ALL SELECT 1000 ) SELECT t.threshold, COUNT(y.ID) AS total_rows, -- 统计Score大于当前阈值的总行数 SUM(CASE WHEN y.`Check` = 1 THEN 1 ELSE 0 END) AS check_1_count -- 统计其中Check=1的数量 FROM thresholds t LEFT JOIN your_table y ON y.Score > t.threshold GROUP BY t.threshold ORDER BY t.threshold;
兼容老版本数据库的写法(无WITH子句)
如果你的数据库不支持WITH公共表表达式,可直接用子查询构造阈值集合:
SELECT t.threshold, COUNT(y.ID) AS total_rows, SUM(CASE WHEN y.`Check` = 1 THEN 1 ELSE 0 END) AS check_1_count FROM ( SELECT 0 AS threshold UNION ALL SELECT 200 UNION ALL SELECT 400 UNION ALL SELECT 600 UNION ALL SELECT 800 UNION ALL SELECT 1000 ) t LEFT JOIN your_table y ON y.Score > t.threshold GROUP BY t.threshold ORDER BY t.threshold;
注意事项
- 由于
Check是SQL保留字,需用对应数据库的转义符包裹:MySQL用反引号,SQL Server用方括号[Check],Oracle用双引号"Check"`。 - 若原表中Score为NULL,
Score > threshold会返回NULL,不会被统计,符合常规需求;若需包含NULL值,可调整条件为y.Score > t.threshold OR y.Score IS NULL。
内容的提问来源于stack exchange,提问作者Georgia
相关产品推荐
相关产品推荐

