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

SQL Server 2019不使用子查询实现分组分类计数的查询方法

问题描述

现有如下源数据:

name      type       date
--------------------------------
john     typeA      2022-06-01 
james    typeA      2022-06-01
james    typeA      2022-06-01 
james    typeB      2022-06-01
bob      typeA      2022-06-01
bob      typeB      2022-06-01

要求在SQL Server 2019环境中,不使用子查询编写SQL语句,得到如下输出结果:

name    countOfTypeA    countOfTypeB
------------------------------------
john    1               0
james   2               1
bob     1               1  
解决方法

使用GROUP BY搭配条件聚合即可实现,全程无需子查询,参考语句如下(将your_table替换为实际的表名即可):

SELECT
    name,
    COUNT(CASE WHEN type = 'typeA' THEN 1 END) AS countOfTypeA,
    COUNT(CASE WHEN type = 'typeB' THEN 1 END) AS countOfTypeB
FROM your_table
-- 若仅需统计2022-06-01的数据,可取消下方注释
-- WHERE date = '2022-06-01'
GROUP BY name
ORDER BY name;

逻辑说明

  • 按name字段分组,将同一名称的所有记录归为同一组
  • 组内通过CASE表达式做类型匹配:匹配目标type时返回非空值,不匹配时默认返回NULL
  • COUNT函数统计时会自动忽略NULL值,因此可以直接得到每组内对应type的记录数,无匹配记录时计数为0,完全符合输出要求
  • 该写法语法兼容SQL Server 2019,执行效率优于嵌套子查询、CTE等写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:33:14