分组查询方法:
一、格式:
SELECT
列(这个列要求必须只能是group by的后面字段),分组函数()
FROM
表名
WHERE
筛选条件(针对表的所有记录)
GROUP BY
分组字段列表
HAVING(只能配合GROUP BY使用)
与分组有关的筛选条件
ORDER BY
排序
二、注意:
1、分组之后,查询的字段只能是:查询的字段、聚合函数。
2、where和having的区别:
* where 在分组之前进行限定,如果不满足此条件,不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来。
* where后不可以跟聚合函数,而having可以进行聚合函数判断。
三、测试:
#查询员工人数超过5人的部门,并计算该部门员工人数,最后结果按照人数由多到少排列
SELECT COUNT(*)部门人数,department_id
FROM
employees
GROUP BY
department_id
HAVING
部门人数>5
ORDER BY 部门人数 DESC;
结果:
#查询领导没有奖金的那个部门的员工的最高工资,且工资需要大于5000,并按最高工资从高到低排列
SELECT MAX(salary)最高工资,salary,department_id
FROM
employees
WHERE
commission_pct IS NULL#这里注意和函数ISNULL的区别,有空格
GROUP BY
department_id
HAVING
最高工资>5000
ORDER BY
最高工资 DESC;
结果:
#查询员工信息中包含字母’a‘的每个部门的平均工资,并按平均工资从高到底排列
SELECT AVG(salary)平均工资,department_id
FROM
employees
WHERE
email LIKE '%a%'#这里是顿号,如果是强调和专用名词区分用着重号
GROUP BY
department_id
ORDER BY 平均工资 DESC;
输出结果: