在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 SELECT SUM(population) FROM bbc 这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有 国家的总人口数。 having是分组(group by)后的筛选条件,分组后的数据组内再筛选 where则是在分组前筛选 通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。 在SQL语言中,GROUP BY和HAVING子句是数据分析和数据汇总的重要工具,它们与聚合函数如SUM, COUNT, MAX, AVG等一起使用,帮助我们处理多条记录的数据。聚合函数对一组数据进行计算,例如求和、计数、最大值或平均值,而这些操作通常用于对数据库中的数据进行汇总。 GROUP BY子句的主要作用是根据一个或多个列将数据分组。例如,如果我们有一个包含各国人口和面积的“bbc”表,我们可以使用`GROUP BY region`来按地区分组数据。这样做后,对于每个地区,所有其他非分组列的值都将通过聚合函数处理,返回单个结果。比如,`SUM(population)`和`SUM(area)`会分别给出每个地区的总人口和总面积。 HAVING子句则是对GROUP BY分组后的结果进行过滤。它与WHERE子句类似,但WHERE子句在聚合操作之前工作,而HAVING子句在聚合之后工作。这意味着WHERE子句不能用来筛选由GROUP BY生成的聚合结果。例如,如果我们想找出面积超过1000000的地区,我们必须使用HAVING子句,因为它能够筛选出满足条件的组,而不是单独的记录。 以下是一些示例: 1. 显示每个地区的总人口和总面积: ```sql SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region; ``` 2. 显示每个地区的总人口和总面积,仅显示面积超过1000000的地区: ```sql SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY region HAVING SUM(area) > 1000000; ``` 3. 查询CUSTOMER和ORDER表中用户的订单数,以及只显示订单数超过5的用户: ```sql SELECT c.name, COUNT(o.order_number) AS count FROM orders o, customer c WHERE c.id = o.customer_id GROUP BY c.id HAVING COUNT(o.order_number) > 5; ``` 4. 对于一个名为SC的学生分数表,显示每个学生90分以上课程的数量: ```sql SELECT sno, COUNT(*) FROM sc WHERE grade >= 90 GROUP BY sno; ``` 在SC表中,如果我们想进一步找出每个学生90分以上课程的数量,可以先按照学生号(SNO)分组,然后计算每个组中满足条件(grade >= 90)的记录数量,这正是GROUP BY和HAVING子句的应用。 总结起来,GROUP BY用于将数据分组,而HAVING则对这些分组应用过滤条件,这两个子句结合聚合函数,为我们在SQL中提供了强大的数据分析能力。正确使用它们可以帮助我们更有效地从大量数据中提取有意义的信息。
- 粉丝: 4
- 资源: 922
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助