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

SQL使用CASE WHEN提取字段后分组统计各分类行数的方法

SQL分组统计实现方案

要实现按提取出的应用名称分组统计记录条数,只需对计算得到的Application字段做分组,搭配COUNT(*)聚合函数统计每组的记录总数即可,以下是两种可直接运行的写法:

写法1:子查询预处理(推荐,可维护性更高)

把应用名称提取逻辑放在子查询中预先计算,后续分组、过滤不需要重复编写相同的CASE表达式,调整提取规则时只需要修改一处代码:

SELECT 
    [Application],
    COUNT(*) AS [Counts]
FROM (
    SELECT 
        CASE 
            WHEN w.[description] LIKE '%Provisioning%' 
            THEN LEFT(w.[description], CHARINDEX('Provisioning', w.[description]) - 2)
            ELSE '' 
        END AS [Application]
    FROM [Table 1] AS w
    LEFT JOIN [Table2] AS i ON i.[id] = w.[owner]
    WHERE 
        [owner_name] IN ('Specific_Owner')
        AND (CONVERT(DATETIME, DATEADD(s, w.[created]/1000, '1970-01-01'), 110) BETWEEN CONVERT(DATETIME, '2022-05-09') AND CONVERT(DATETIME, '2022-06-01'))
        AND w.[description] NOT LIKE '%Approve%'
) AS pre_processed
GROUP BY [Application]
-- 若需要按记录数从高到低排序,可追加下方排序语句
-- ORDER BY [Counts] DESC

写法2:无嵌套直接分组

不需要嵌套子查询,直接把CASE表达式写在GROUP BY子句中即可,适合逻辑简单不会频繁调整的场景:

SELECT 
    CASE 
        WHEN w.[description] LIKE '%Provisioning%' 
        THEN LEFT(w.[description], CHARINDEX('Provisioning', w.[description]) - 2)
        ELSE '' 
    END AS [Application],
    COUNT(*) AS [Counts]
FROM [Table 1] AS w
LEFT JOIN [Table2] AS i ON i.[id] = w.[owner]
WHERE 
    [owner_name] IN ('Specific_Owner')
    AND (CONVERT(DATETIME, DATEADD(s, w.[created]/1000, '1970-01-01'), 110) BETWEEN CONVERT(DATETIME, '2022-05-09') AND CONVERT(DATETIME, '2022-06-01'))
    AND w.[description] NOT LIKE '%Approve%'
GROUP BY 
    CASE 
        WHEN w.[description] LIKE '%Provisioning%' 
        THEN LEFT(w.[description], CHARINDEX('Provisioning', w.[description]) - 2)
        ELSE '' 
    END

补充说明:如果不需要统计未匹配到Provisioning关键字、Application值为空字符串的分组,直接在查询中增加对应过滤条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:36:21