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