MySQL之GROUP BY和HAVING用法详解
在MySQL中,GROUP BY
和HAVING
是用于对数据进行分组和过滤的两个非常重要的语句。
一、GROUP BY语句
GROUP BY
语句用于对查询结果集进行分组。它可以将相同的数据分为一组,并对每一组进行计算。
语法:
SELECT column_name1, COUNT(column_name2)
FROM table_name
GROUP BY column_name1
解释:
SELECT
语句中,第一个参数column_name1
表示需要分组的字段。- 第二个参数
COUNT(column_name2)
表示求column_name2
字段的计算结果,比如计算该字段的个数、求和等。 FROM
语句中,table_name
表示需要查询的数据表。GROUP BY
语句中,column_name1
表示需要分组的字段。
例如,我们有一个orders
表,其中存储了顾客的订单信息:
id | customer_id | order_date | amount |
---|---|---|---|
1 | 1 | 2020-01-01 | 100 |
2 | 1 | 2020-01-02 | 200 |
3 | 2 | 2020-01-03 | 150 |
4 | 2 | 2020-01-04 | 300 |
现在我们想要统计每个顾客的订单总金额,可以使用以下的GROUP BY
语句:
SELECT customer_id, SUM(amount) as total_amount
FROM orders
GROUP BY customer_id
执行结果为:
customer_id | total_amount |
---|---|
1 | 300 |
2 | 450 |
二、HAVING语句
HAVING
语句用于在GROUP BY
语句的基础上对结果集进行过滤。它可以筛选出满足指定条件的分组数据。
语法:
SELECT column_name1, COUNT(column_name2)
FROM table_name
GROUP BY column_name1
HAVING condition
解释:
SELECT
语句、FROM
语句、GROUP BY
语句的含义同上。HAVING
语句中,condition
表示需要满足的条件。
例如,我们有一个students
表,其中存储了学生的成绩信息:
id | name | subject | score |
---|---|---|---|
1 | Alice | Math | 80 |
2 | Alice | English | 90 |
3 | Bob | Math | 70 |
4 | Bob | English | 85 |
现在我们想要筛选出每个学生的平均成绩大于80的记录,可以使用以下的语句:
SELECT name, AVG(score) as avg_score
FROM students
GROUP BY name
HAVING avg_score > 80
执行结果为:
name | avg_score |
---|---|
Alice | 85 |
Bob | 77.5 |
三、总结
GROUP BY
和HAVING
是用于数据分组和过滤的两个重要语句,它们能够帮助我们对数据进行更精细的分析和处理。
在使用GROUP BY
语句时,需要注意的是字段中的空值会分为一组;而使用HAVING
语句时,需要先使用GROUP BY
语句进行分组,再在分组的基础上进行条件筛选。
希望本篇攻略能对您的学习有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql之group by和having用法详解 - Python技术站