GROUP BY和集合函数

本文介绍SQL中集函数的应用,包括计数、平均数、最大值等,并通过实例展示了如何使用COUNT、AVG、MAX等函数进行数据统计。同时讲解了GROUP BY子句的用法,以及如何结合HAVING短语筛选符合条件的数据组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用集函数

SQL提供了许多集函数,主要包括:

26 查询学生总人数。

SELECT COUNT(*AS Expr1 FROM student

 27 查询选修了课程的学生人数。

注:前者是正确的,后者是没有加DISTINCT修饰的情况。

SELECT COUNT(DISTINCT  Sno) AS Expr1 FROM SC

SELECT COUNT(Sno) AS Expr1 FROM SC

28计算1号课程的学生平均成绩。

SELECT AVG(Grade) FROM SC  WHERE Sno='1'

29 查询学习1号课程的学生最高分数。

SELECT MAX(Grade) FROM SC WHERE Sno='1'
五、对查询结果分组

GROUP BY子句可以将查询结果表的各行按一列或多列值分组,值相等的为一组。

对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值。否则,集函数将作用于每一个组,即每一组都有一个函数值。

30 查询各个课程号与相应的选课人数。

SELECT Cno, Count(Sno) AS Expr1 FROM SC GROUP BY Cno 

31 查询选修了2门以上课程的学生的学号。

SELECT Sno FROM SC GROUP BY Sno HAVING (COUNT(*)>2)

 

WHERE子句与HAVING短语的区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。

先用GROUP BY子句按Sno分组,再用集函数COUNT对每一组计数。HAVING短语指定选择组的条件,只有满足条件(即元组个数>3,表示此学生选修的课超过3门)的组才会被选出来。
### DB2 数据库中 GROUP BY 的使用方法 在 DB2 数据库中,`GROUP BY` 是一种用于对数据进行分组并执行聚合操作的关键子句。其基本功能其他关系型数据库(如 MySQL 或 Oracle)相似,但在某些细节上可能存在差异。 #### 基本语法 以下是 `GROUP BY` 在 DB2 中的基本语法结构: ```sql SELECT column_name, aggregate_function(column_name) FROM table_name WHERE where_conditions GROUP BY column_name; ``` 此语法规则表明,在 `SELECT` 列表中使用的任何非聚合列都必须显式地包含在 `GROUP BY` 子句中[^1]。如果违反这一规则,则会导致错误。 #### 示例 1:单列分组 假设有一个名为 `employees` 的表,其中包含员工的部门编号 (`department_id`) 薪资 (`salary`) 字段。要计算每个部门的平均薪资,可以编写如下查询: ```sql SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id; ``` 这条查询将返回每种 `department_id` 对应的平均薪资值[^4]。 #### 示例 2:多列分组 当需要基于多个字段进行分组,可以在 `GROUP BY` 后面指定多个字段名,并用逗号分隔它们。例如,如果我们希望按部门职位分类来统计平均薪资,可写成以下形式: ```sql SELECT department_id, job_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id, job_id; ``` 这里的结果集将会展示不同组合下的部门与职位对应的平均薪酬情况[^4]。 #### 注意事项 - **未使用聚合函数的列**:对于那些既没有被聚合也没有参与分组运算的列来说,不允许直接出现在最终结果集中;除非这些列本身也加入了相应的聚集表达式之中[^3]。 - **NULL 值处理**:类似于其他主流的关系型数据库管理系统(RDBMS),在利用 `GROUP BY` 进行数据分析期间遇到 null 类型的数据项,默认将其当作独立的一类来进行对待[^3]。 - **性能考量**:针对特别庞大的资料集合运用 group by 功能可能会降低整体运行速度。因此建议通过创建合适的索引来优化此类查询的表现效果[^3]。 #### 高级特性 - WITH ROLLUP DB2 支持扩展标准SQL的功能之一就是允许我们在汇总的同还能够得到更高层次上的总计信息。“WITH ROLLUP”选项使得我们可以轻松实现这一点: ```sql SELECT department_id, SUM(salary) as total_salary FROM employees GROUP BY department_id WITH ROLLUP; ``` 这段代码不仅给出了各部门内部成员薪水总额的信息,还会额外附加一条记录表示整个公司范围内所有雇员薪金总合的情况[^4]。 ### 结论 综上所述,无论是基础应用还是高级技巧方面,掌握好如何恰当合理地部署以及调整我们的 sql statement 当中的 “group by” 条件设置都是非常重要的技能点所在!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值