SQL查询分组统计:轻松搞定数据汇总

SQL查询分组统计:轻松搞定数据汇总

做数据分析或者处理表格时,经常遇到这样的问题:比如公司销售表里有几百条记录,想看看每个部门一共卖了多少钱,或者每位员工完成了多少订单。这时候一个个去数显然不现实,用Excel拖拽也可能出错。其实,一条简单的SQL查询就能搞定——靠的就是“分组统计”。

分组统计的核心是 GROUP BY 这个关键词。它能把相同特征的数据归到一组,再配合 COUNT、SUM、AVG 这些聚合函数,快速得出你想要的结果。

按部门统计销售额

假设有一张 sales 表,字段包括 department(部门)、employee(员工)、amount(金额)。现在想知道每个部门的总业绩:

SELECT department, SUM(amount) AS total_sales FROM sales GROUP BY department;

执行后就会看到每个部门对应的销售总额。就像食堂阿姨按班级收饭费,把同一个班的钱加在一起,一眼就知道哪个班花得最多。

统计每人订单数量

如果关心的是员工个人表现,可以按人头分组:

SELECT employee, COUNT(*) AS order_count FROM sales GROUP BY employee;

这条语句会列出每个人完成了几笔订单。COUNT(*) 中的星号代表“所有行”,不管内容是不是空,只要存在就算一条。

加上条件筛选:只看达标数据

有时候不需要全部数据。比如只想查销售额超过5000的部门,就得用 HAVING:

SELECT department, SUM(amount) AS total_sales FROM sales GROUP BY department HAVING SUM(amount) > 5000;

注意,HAVING 是对分组后的结果做筛选,而 WHERE 是在分组前过滤原始数据。比如先排除退款订单,再统计,就得这么写:

SELECT department, SUM(amount) AS total_sales FROM sales WHERE status != 'refunded' GROUP BY department;

这就像整理快递包裹,先扔掉退货的,再按楼栋打包统计。

组合维度更精细

还可以同时按多个字段分组。比如想看“每个部门里每位员工的平均订单额”:

SELECT department, employee, AVG(amount) AS avg_amount FROM sales GROUP BY department, employee;

这样输出的结果会先按部门排,部门内再按员工分,层级分明,适合做绩效报表。

掌握 GROUP BY 和配套的聚合函数,处理日常表格数据效率能提一大截。不管是运营、财务还是产品经理,都能靠它省下大量复制粘贴的时间。