2019-03-26 5个分组函数、分组、SELECT执行语句的顺序问题

5个分组函数

-- 函数
-- NOW() CURDATE() CURTIME()
-- DATE_FORMAT(date,format)


-- 5个分组函数
-- MAX(expr) MIN(expr):所有数据类型都可以

select MAX(ename),MIN(ename)
from emp

-- SUM(expr) AVG([DISTINCT] expr)【平均值】:只能操作数值


-- COUNT(expr);返回个数,查数据数量
select COUNT(empno) from emp

-- 分组函数忽略空值计算
select AVG( comm) from emp
select AVG( IFNULL(comm,0)) from emp

-- 使用分组函数有严格限制,select子句后面不能再随意写
-- =====================================================
-- 查询emp表中有多少员工
select COUNT(empno) 
from emp
-- 查询职位以sales开头的所有员工平均工资、最低工资、最高工资、工资和。
select avg(sal),min(sal),max(sal),sum(sal)
from emp
where job like 'sales%'

分组

--  分组 group by
-- where(组前条件)中不能用别名,分组函数
-- having (组后条件)
-- =======================================================
-- 求各个部门平均工资 
select deptno,avg(sal)
from emp
GROUP BY deptno

select deptno,avg(sal)
from emp
where deptno!=20 -- ->组前条件
GROUP BY deptno

-- 查询每个部门的平均工资,1500一下不算
select deptno,avg(sal) avgsal
from emp
where sal>1500
GROUP BY deptno

-- 查询每个部门每个岗位的工资总和。
SELECT deptno,job,SUM(sal)
from emp
GROUP BY deptno,job

SELECT执行语句的顺序问题

-- SELECT执行语句
-- 书写顺序:select 
--         from 
--         where 
--         group by 
--         having 
--         order by 
--         limit 
-- 执行顺序 from 
--         where
--         group by 
--         having 
--         select 
--         order by 
--         limit 
-- ①where 不能使用列别名
-- ②where 不能使用分组函数
-- ③order by 可以使用列别名
-- ④不分组不允许单独使用having
-- 子查询
-- 查询比CLARK工资高的员工信息
select *
from emp
where sal>(select sal from emp where binary ename='CLARK')

- 4.查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
SELECT d.deptno,dname,count(empno)
from emp e
join dept d
on e.deptno=d.deptno
GROUP BY d.deptno,dname
having count(empno)>(select avg(renshu)
                                        from(SELECT count(empno) renshu
                                             from emp
                                             GROUP BY deptno)rs)

你可能感兴趣的:(2019-03-26 5个分组函数、分组、SELECT执行语句的顺序问题)