1 group by
将表中的数据拆分成多个小组。
语法:
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
注:
group by子句中没有分组的列,在select 子句中不能添加。
where子句必须在group by前边。
group by 后边不能用别名。
如:
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
统计每个部门的平均工资。
如下不能按照组函数进行排序
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);
2 多列分组
可以按照多个列来进行分组
如:
SELECT department_id, job_id, sum(salary)
FROM employees
GROUP BY department_id, job_id
ORDER BY job_id;
先按照部分分组,并且在同一个部门中,统计每个工种的工资和。
最后结果按照工种的升序排序。
3 误用
误用一:
SELECT department_id, COUNT(last_name)
FROM employees;
在select子句中出现分组函数且有其它列时,那么必须要按照这个列分组,也就是必须按照以上的department_id分组。
误用二:
SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;
如上where后边不能按照组函数结果过滤,可以在having子句中对组函数结果过滤。
4 练习题
下列哪两项关于组函数和group by子句说法正确?
A.在group by 子句中不能使用列别名
B.在group by子句后边出现的列,必须在select子句中出现
C.通过使用where子句,可以在分组之前过滤
D.分组子句可以对行进行分组并且保证结果集的排序
E.如果在select中引用了组函数,必须包含group by 子句
【答题小贴士】:
1、以墨天轮文章的形式解析题目并给出答案
2、将墨天轮文章链接发送到此文的评论区
最后修改时间:2020-06-30 11:00:59
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




