MySQL GROUP BY与HAVING子句实战:统计员工工作天数

夏知夏
夏知夏
发布时间:2026-10-13 | 4人浏览过
原创

在MySQL数据处理中,GROUP BY用于将数据分组合并,而HAVING则用于对分组后的结果进行过滤。本文将结合员工工作记录表的具体实例,详细讲解如何使用这两个子句来统计特定条件下的数据,例如找出工作天数大于1的员工。

基本规则与准备

在使用GROUP BY时,必须遵循一个核心原则:SELECT子句中出现的非聚合列,必须出现在GROUP BY的子句中。例如,若按name分组,则查询字段中只能包含name或聚合函数(如COUNT()、SUM()等)。

以下数据作为本教程的测试基础,这是一张名为employee_tbl的员工工作记录表:

mysql> SELECT * FROM employee_tbl;
+------+--------+------------+--------------------+
| id   | name   | work_date  | daily_typing_pages |
+------+--------+------------+--------------------+
|    1 | John   | 2007-01-24 |                250 |
|    2 | Ram    | 2007-05-27 |                220 |
|    3 | Jack   | 2007-05-06 |                170 |
|    3 | Jack   | 2007-04-06 |                100 |
|    4 | Jill   | 2007-04-06 |                220 |
|    5 | Zara   | 2007-06-06 |                300 |
|    5 | Zara   | 2007-02-06 |                350 |
+------+--------+------------+--------------------+
7 rows in set (0.00 sec)

第一步:使用GROUP BY统计每个员工的记录数

目的:了解每个员工在表中出现了多少次(即有多少条工作记录)。 操作:使用COUNT(*)计数并结合GROUP BY name进行分组。

mysql> SELECT name, COUNT(*)
    -> FROM employee_tbl 
    -> GROUP BY name;

执行结果:

+------+----------+
| name | COUNT(*) |
+------+----------+
| Jack |        2 |
| Jill |        1 |
| John |        1 |
| Ram  |        1 |
| Zara |        2 |
+------+----------+
5 rows in set (0.04 sec)

完成状态:此时可以看到Jack和Zara各有2条记录,其他员工各1条。

第二步:结合HAVING筛选符合条件的分组

目的:从上述分组结果中,进一步筛选出工作记录数(即工作天数)大于1天的员工。 区别说明:WHERE不能在GROUP BY之后过滤分组结果,必须使用HAVING子句。

操作:在查询末尾添加HAVING COUNT(*) > 1条件。

mysql> SELECT name, COUNT(*)
    -> FROM employee_tbl 
    -> GROUP BY name 
    -> HAVING COUNT(*) > 1;

执行结果:

+------+----------+
| name | COUNT(*) |
+------+----------+
| Jack |        2 |
| Zara |        2 |
+------+----------+
2 rows in set (0.04 sec)

完成状态:查询成功返回了所有工作天数超过一天的员工列表(Jack和Zara)。

总结

GROUP BY负责将数据按指定列归类,而HAVING负责在归类后对聚合结果进行二次过滤。两者结合是处理统计类需求的标准范式。以上就是MySQL中GROUP BY与HAVING结合使用的详细内容,更多关于SQL查询优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表