Author: 刘老师(Aaron Lau)
武汉长乐教育,武汉PHP培训课程,版权所有,转载请注明!
Mysql中的group by用法解析
group by
即分组查询,请各位同学务必掌握好,面试必备!
下面看案例
id |
name |
dept |
salary |
edlevel |
hiredate |
1 |
张三 |
开发部 |
2000 |
3 |
2009-10-11 |
2 |
李四 |
开发部 |
2500 |
3 |
2009-10-01 |
3 |
王五 |
设计部 |
2600 |
5 |
2010-10-02 |
4 |
王六 |
设计部 |
2300 |
4 |
2010-10-03 |
5 |
马七 |
设计部 |
2100 |
4 |
2010-10-06 |
6 |
赵八 |
销售部 |
3000 |
5 |
2010-10-05 |
7 |
钱九 |
销售部 |
3100 |
7 |
2010-10-07 |
8 |
孙十 |
销售部 |
3500 |
7 |
2010-10-06 |
1. 列出每个部门最高薪水的结果
SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
DEPT |
MAXIMUM |
开发部 |
2500 |
设计部 |
2600 |
销售部 |
3500 |
2. 查询每个部门的总的薪水数
SELECT DEPT, sum( SALARY ) AS total
FROM STAFF
GROUP BY DEPT
DEPT |
total |
开发部 |
4500 |
设计部 |
7000 |
销售部 |
9600 |
3. WHERE
与GROUP BY
一起使用
SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUM
FROM staff
WHERE HIREDATE > '2010-01-01'
GROUP BY DEPT, EDLEVEL
ORDER BY DEPT, EDLEVEL
DEPT |
EDLEVEL |
MAXIMUM |
设计部 |
4 |
2300 |
设计部 |
5 |
2600 |
销售部 |
5 |
3000 |
销售部 |
7 |
3500 |
4. 在GROUP BY
之后使用HAVING
寻找雇员数超过2个的部门的最高和最低薪水:
SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING COUNT(*) >2
ORDER BY DEPT
DEPT |
MAXIMUM |
MINIMUM |
设计部 |
2600 |
2100 |
销售部 |
3500 |
3000 |
寻找雇员平均工资大于3000的部门的最高和最低薪水:
SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING AVG( SALARY ) >3000
ORDER BY DEPT
DEPT |
MAXIMUM |
MINIMUM |
销售部 |
3500 |
3000 |
5. having
与where
的区别
注意: having
和where
都是用来筛选的
having
是筛选组
而where
是筛选记录
- 当
分组筛选
的时候 用having
- 其它情况用
where
用having
就一定要和group by
连用,
用group by
不一有having
(它只是一个筛选条件用的)