-- 分组函数
SELECT sum(t.sal) 求和,avg(sal),max(sal),min(sal),count(empno) FROM scott.emp t;
-- 普通函数查询表信息,有多少行就会返回多少行数据
SELECT CONCAT(dname,'的地址在',loc) FROM scott.dept;
-- 分组函数只能会返回一行数据
SELECT count(empno) FROM scott.emp;
-- 分组查询
-- 查询每个部门中有多少人,要求列出部门编号和人数。
SELECT deptno,count(empno) FROM scott.emp GROUP BY deptno;
-- 查询每个岗位的平均工资
SELECT job,avg(sal) FROM scott.emp GROUP BY job;
-- 查询每个部门中每个岗位的人数和最高工资
SELECT deptno,job,count(*),max(sal) FROM scott.emp GROUP BY deptno,job;
-- 分组条件
-- 查询每个部门的人数,要求只显示人数大于3人的数据。
SELECT deptno,count(empno) FROM scott.emp GROUP BY deptno HAVING count(empno)>3;
-- 查询每个部门中,名字包含有E的员工人数
SELECT deptno,count(*) FROM scott.emp WHERE ename like'%E%' GROUP BY deptno;
-- 如果是分组字段,则在where和having后面都可以使用
SELECT deptno,count(*) FROM scott.emp WHERE deptno=10 GROUP BY deptno;
SELECT deptno,count(*) FROM scott.emp GROUP BY deptno HAVING deptno=10;
-- 查询各部门中名字中包含E的员工人数,要求人数超过1个,只显示部门编号、人数。
SELECT deptno,count(*)
FROM scott.emp
WHERE ename like'%E%'
GROUP BY deptno
HAVING count(*)>1;
-- 查询各岗位中工资在1000-3000之间的最高工资和最低工资,要求最高工资不等于3000。
SELECT job,max(sal),min(sal)
FROM scott.emp
WHERE sal BETWEEN 1000 and 3000
GROUP BY job
HAVING max(sal)!=3000;
-- 排序
-- 查询公司所有的员工,按工资升序排列
SELECT * FROM scott.emp ORDER BY sal ASC;
-- 查询公司所有的员工,按工资升序排列,工资相同的按奖金降序排列
SELECT * FROM scott.emp ORDER BY sal ASC,comm DESC;