MySQL的GROUP BY子句可以对查询结果进行分组操作,以便进一步使用聚合函数对每组数据进行统计。
针对多个字段进行分组操作的完整攻略如下:
1. 语法格式
SELECT column1, column2, ..., aggregation
FROM table
GROUP BY column1, column2, ...;
GROUP BY子句的语法格式中,输入要聚合的列名,用逗号分隔。同时该语句要求输出的列名也要写入SELECT子句。聚合函数可以对分组后的结果进行统计。
2. 示例
例如,我们有以下的一个表t_grade来表示学生课程成绩:
student_id | course | grade |
---|---|---|
1 | math | 80 |
2 | math | 85 |
1 | english | 90 |
2 | english | 95 |
3 | english | 88 |
为了分别计算每个学生的数学以及英语课程平均分,我们可以使用如下的SQL语句:
SELECT student_id, course, AVG(grade) as avg_grade
FROM t_grade
GROUP BY student_id, course;
输出结果如下:
student_id | course | avg_grade |
---|---|---|
1 | math | 80 |
1 | english | 90 |
2 | math | 85 |
2 | english | 95 |
3 | english | 88 |
3. 示例解释
上述SQL语句中,我们指定了要分组的列是student_id和course。我们统计每位学生的平均分,因此avg(grade)聚合函数是必须的。通过执行group by语句,结果按照student_id和course分组,并对每个组的grade列进行平均处理。最后,输出结果包括三列:student_id、course和avg_grade。
另一个常见的示例是将数据按照多个字段进行分组,并进行聚合函数的统计。以下SQL语句可以帮助我们找到每个部门的平均工资和平均工龄:
SELECT department,
AVG(salary) AS avg_salary,
AVG(YEAR(CURRENT_DATE) - YEAR(hire_date)) AS avg_experience
FROM employees
GROUP BY department;
以上SQL语句中,我们通过使用department进行分组,并对salary和hire_date使用聚合函数进行统计。用YEAR函数获取雇佣时间,再使用聚合函数平均计算工龄。 最后,输出结果包括三个列:department、avg_salary和avg_experience。
希望这个攻略能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql group by 对多个字段进行分组操作 - Python技术站