You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中按数值区间统计匹配行数?

在SQL Server中实现按Value区间统计行数

原始数据

idValue
12
24
33
46
58
610

需求

按以下三个区间统计匹配行数,输出指定格式结果:

  • Value < 4 → class 1
  • 4 ≤ Value ≤ 8 → class 2
  • Value > 8 → class 3

方法1:CASE表达式+GROUP BY(最直接)

通过CASE将每行数据映射到对应的class分组,再统计每组的行数,是最常用的实现方式:

SELECT
    CASE
        WHEN Value < 4 THEN 1
        WHEN Value BETWEEN 4 AND 8 THEN 2
        WHEN Value > 8 THEN 3
    END AS class,
    COUNT(*) AS matches
FROM YourTableName -- 替换为你的实际表名
GROUP BY
    CASE
        WHEN Value < 4 THEN 1
        WHEN Value BETWEEN 4 AND 8 THEN 2
        WHEN Value > 8 THEN 3
    END
ORDER BY class;

输出结果:

classmatches
12
23
31

方法2:构造基准表+左连接(确保全区间显示)

如果需要保证即使某个区间没有匹配数据,也能输出对应的class行(matches为0),可以先定义区间基准表,再通过左连接完成统计:

WITH ClassRanges AS (
    SELECT 1 AS class, -999999 AS min_val, 3 AS max_val UNION ALL
    SELECT 2 AS class, 4 AS min_val, 8 AS max_val UNION ALL
    SELECT 3 AS class, 9 AS min_val, 999999 AS max_val
)
SELECT
    cr.class,
    COUNT(t.id) AS matches
FROM ClassRanges cr
LEFT JOIN YourTableName t 
    ON t.Value > cr.min_val AND t.Value <= cr.max_val
GROUP BY cr.class
ORDER BY cr.class;

优势:当某个区间无匹配数据时,仍会输出该行(例如如果没有Value>8的数据,class3的matches会显示0)。


方法3:UNION ALL拼接统计结果

分别统计每个区间的匹配数,再用UNION ALL拼接成最终结果,逻辑直观,适合单独调试每个区间的统计规则:

SELECT
    1 AS class,
    COUNT(CASE WHEN Value < 4 THEN 1 END) AS matches
FROM YourTableName
UNION ALL
SELECT
    2 AS class,
    COUNT(CASE WHEN Value BETWEEN 4 AND 8 THEN 1 END) AS matches
FROM YourTableName
UNION ALL
SELECT
    3 AS class,
    COUNT(CASE WHEN Value > 8 THEN 1 END) AS matches
FROM YourTableName;

内容的提问来源于stack exchange,提问作者AlexB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:02:43