携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第47天,点击查看活动详情
基础数据
1.统计平均工资大于2000的部门(having使用)
错误查询方式:
查询语句
SELECT deptno from t_emp WHERE AVG(sal)>2000 GROUP BY deptno
查询结果
报错原因:
因为where的优先级高于group by,平均工资还没算出来就进行分组,会报错
正确查询方式:
正确查询语句:
SELECT deptno from t_emp GROUP BY deptno HAVING AVG(sal)>2000
查询结果:
2.group by 数字
查询语句
SELECT deptno,sal,COUNT(*) from t_emp GROUP BY 1
查询结果
总结
group by 1表示的是对查询结果的depno字段进行分组
3.分组结果统计(WITH ROLLUP)
查询语句
SELECT deptno,COUNT(*),AVG(sal) from t_emp GROUP BY deptno WITH ROLLUP
查询结果:
4.查询结果进行连接group_concat
查询每个部门工资大于2000的员工并且统计数量
查询语句:
SELECT GROUP_CONCAT(ename),deptno,COUNT(*) from t_emp WHERE sal>2000 GROUP BY deptno
查询结果:
5.连接查询
前置数据:
部门表:t_dept
薪资等级表:t_salgrade
员工表:t_emp
查询要求:查询员工工号,薪水,员工名字,员工所属部门,薪资等级信息
查询语句:
SELECT
e.empno,
e.sal,
e.ename,
d.dname,
s.grade
FROM
t_emp e
JOIN t_dept d ON e.deptno = d.deptno
JOIN t_salgrade s ON e.sal BETWEEN s.losal
AND s.hisal
查询结果:
6.子查询和连接查询效率问题
查询要求:查询和SMITH同部门的员工
子查询:
SELECT * from t_emp where deptno=(
SELECT deptno from t_emp where ename = "SMITH") and ename!="SMITH"
查询结果:
连接查询:
SELECT e2.empno,e2.ename,e2.deptno from t_emp e1 JOIN t_emp e2 on e1.deptno= e2.deptno where e1.ename="SMITH" and e2.ename!="SMITH"
查询结果: