MSSQL里怎么用命令行做分类统计,经验和技巧分享
- 问答
- 2026-01-09 16:07:46
- 5
关于在MSSQL里用命令行(也就是我们常说的查询语句)做分类统计,其实说白了就是把一堆数据,按照你关心的某个或某几个特征分分组,然后数一数每组有多少条、算算平均值什么的,这事儿听起来简单,但想做得又快又好,里面有不少小门道,下面我就结合自己用过的一些情况和看别人分享的经验(主要参考了SQL Server官方文档和一些技术社区像Stack Overflow上的讨论),来聊聊怎么弄。
核心就靠GROUP BY
干这个活儿,最核心的命令就是GROUP BY,它的作用就是指定你按哪个“字段”来分组,比如你有一个员工表,里面有部门、性别、工资这些信息,你想知道每个部门有多少人,那语句就是这么写:
SELECT 部门, COUNT(*) as 人数 FROM 员工表 GROUP BY 部门
这句的意思就是:从员工表里,把数据按照“部门”这个字段的值进行分组,所有部门相同的员工会被分到同一组里,然后COUNT(*)就是数一数每一组有多少条记录,最后选出“部门”和计算出来的“人数”。
统计函数是你的计算器

光分组不行,还得计算。COUNT(*)就是最常用的一个统计函数,用来数个数,其他常用的还有:
SUM(字段名):求这一组里某个数值字段的总和,比如算每个部门的总工资。AVG(字段名):求平均值,比如算每个部门的平均工资。MAX(字段名):找出组里的最大值。MIN(字段名):找出组里的最小值。
你可以同时用好几个统计函数。
SELECT 部门, COUNT(*) as 人数, AVG(工资) as 平均工资, MAX(工资) as 最高工资 FROM 员工表 GROUP BY 部门
这样一句下去,每个部门的人数、平均工资、最高工资就都出来了。
按多个条件分组
有时候光按一个条件分还不够细,比如你想知道每个部门里,男员工和女员工分别有多少人,这时候就要按两个字段分组了:
SELECT 部门, 性别, COUNT(*) as 人数 FROM 员工表 GROUP BY 部门, 性别
执行后,结果会先按部门分,然后在每个部门内部,再按性别分,这样你就能看到“销售部-男”有多少人,“销售部-女”有多少人,非常清晰。

别忘了HAVING子句来筛选分组
WHERE子句是用来在分组前筛选行的,它不能用在统计函数上,比如你想找工资大于5000的员工,用的是WHERE 工资 > 5000。
但如果你是想在分组统计之后,对统计结果进行筛选,就得用HAVING子句,举个例子,你想找出那些平均工资超过10000的部门:
SELECT 部门, AVG(工资) as 平均工资 FROM 员工表 GROUP BY 部门 HAVING AVG(工资) > 10000
这里,HAVING就是在分组计算完平均工资后,只把平均工资大于10000的部门留下来,这是很多人刚开始容易混淆的地方。
一些实用的经验和技巧
- 别名让结果更清晰:给统计结果的列起个简单的别名(比如
as 人数),这样读起来一目了然。 - 分组字段的选择:你
SELECT后面想显示的列,除非是统计函数,否则几乎都必须出现在GROUP BY子句里,这是语法规定,不然数据库不知道非分组的列该显示哪一条的值。 - 处理NULL值:分组时,如果分组字段的值是NULL,那么所有这些NULL值会被归为同一组,统计函数(如
COUNT)通常会忽略NULL值,COUNT(*)是特例,它直接数行数,心里要有这个数。 - 性能考虑:如果表很大,分组统计可能会慢,可以试着在分组字段上建立索引,能加快分组速度,如果允许,先用
WHERE条件过滤掉大量不需要的数据,再进行分组,负担会小很多,有论坛网友分享过,对大表进行多字段复杂分组时,先创建一个临时表或表变量,把过滤后的数据放进去,再对这个小表做分组,速度提升很明显。 - ROLLUP和CUBE看总计:有时候我们不仅想看分组结果,还想看部分小计和总计,比如按部门和性别分组后,还想看每个部门的总人数(不分性别),以及整个公司的总人数,这时候可以用
GROUP BY ROLLUP(部门, 性别),它会生成带有层次的小计行。CUBE更强大,会生成所有可能组合的小计,这在做报表时特别有用,具体用法可以查一下官方文档,例子很详细。 - 字符串聚合:有时候我们不仅想统计数量,还想看看组里某些文本信息,比如想知道每个部门的员工姓名列表,可以用
STRING_AGG函数(SQL Server 2017及以上版本):SELECT 部门, STRING_AGG(姓名, ', ') as 员工列表 FROM 员工表 GROUP BY 部门这样结果里就会有一列是“张三, 李四, 王五”这样的字符串,非常直观,这个功能是很多人在社区里经常问的,现在有内置函数就方便多了。
分类统计是SQL查询里最常用也最重要的操作之一,把GROUP BY、统计函数和HAVING的关系理顺,再结合一些实战中的小技巧,就能应对大部分日常的数据汇总需求了,关键还是多练,遇到复杂的统计需求,先拆解,想清楚要按什么分、分完要算什么、算完要不要再筛选,一步一步来。
本文由盈壮于2026-01-09发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/77529.html
