分组关键字
GROUP BY 以 值1(字段),值2(字段)… 进行分组,分组顺序从左到右
-
直接上例子!
-
emp { // 员工表 id, '员工id' name, '员工姓名' salary,'工资' jobId, '工种编号' depId, '部门编号' ... } dep {//部门表 id, '员工id' name,'员工姓名' ... } 1. '查询各部门的员工平均的工资' select depId '部门编号', AVG(salary) '该部门的平均工资' from emp group by depId ------------------------------------------ 2. '查询各部门的员工平均的工资(从高到低 降序)' select depId '部门编号', AVG(salary) '该部门的平均工资' from emp group by depId order by '该部门的平均工资' DESC; 'order by 排序,DESC 代表降序' ------------------------------------------ 3.1 '查询各部门的各工种的平均工资(从高到低 降序)' select dept_id '部门编号', job_id '工种编号',AVG(salary) '该部门的平均工资' from emp group by dept_id, job_id 3.2 select dept_id '部门编号', job_id '工种编号',AVG(salary) '该部门的平均工资' from emp group by job_id, dept_id 问: 3.2 和 3.3 交换了分组顺序,结果是一样的吗? '其实是一样的,3.1 根据先分组部门再分组工种 3.2 根据先分组工种再分组部门' ------------------------------------------ 4. select dept_id '部门编号', job_id '工种编号',AVG(salary) '该部门的平均工资' from emp group by dept_id; '这个语句是错误的 因为分组后的部门编号 只显示一个工种, 无论从逻辑上还是实际显示上 这种都是错误的!!!!!!!!' '结论:select中出现非聚合函数的字段 必须在group by 中声明! 但是 group by的字段并不一定要出现在select语句中!' ------------------------------------------ 'group by 出现顺序: 在from后面 where后面, order by 前面 limit前面' 例子: 5. '查询各部门的各工种的工资>6k的人数(从高到低 降序)的前3个部门' select dept_id '部门编号', job_id '工种编号',COUNT(1) '工资大于6k人数' from emp where(salary > 6000) group by dept_id order by '工资大于6k人数' DESC limit 0,3;