目录
2、查询(续)
2.3、排序(升序、降序)
- 按照工资升序排,找出员工名和薪资:
- select ename,sal from emp order by sal;(默认升序)
- select ename,sal from emp order by sal asc;(升序)
- select ename,sal from emp order by sal desc;(降序)
- 按照工资降序排列,当工资相同的时候按照名字的升序排列:select ename,sal from emp order by sal desc,ename asc;
- 按第几列字段排序(不健壮):
- select ename,sal from emp order by 2;
- select ename,sal from emp order by 1;
- select * from emp order by 6;(同select * from emp order by sal;)
- 找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列:select ename,job,sal from emp where job = 'SALESMAN' order by sal desc;
- sal别名salary,按salary排序:select ename,sal as salary from emp order by salary;(说明select先执行,order by后执行。)
select
字段 3
from
表名 1
where
条件 2
order by
...... 4
order by是最后执行的。
注意:order by默认是升序,ASC表示升序,DESC表示降序。
越靠前的字段越能起到主导作用,只有当前面的字段无法完成排序时,才会启用后面的字段。
2.4、分组函数(多行处理函数)
- count计数
- sum求和
- avg平均值
- max最大值
- min最小值
注意:所有的分组函数都是对“某一组”数据进行操作的。
分组函数一共5个。分组函数还有另一个名字:多行处理函数。
多行处理函数的特点:输入多行,最终输出的结果是1行。
分组函数自动忽略NULL。
- 找出工资总和:select sum(sal) from emp;
- 找出最高工资:select max(sal) from emp;
- 找出最低工资:select min(sal) from emp;
- 找出平均工资:select avg(sal) from emp;
- 找出总人数:
- select count(*) from emp;
- select count(ename) from emp;
- 分组函数自动忽略NULL:
- select count(comm) from emp;
- select sum(comm) from emp;
- select sum(comm) from emp where comm is not null;(不需要额外添加这个过滤条件,sum函数自动忽略null。)
找出工资高于平均工资的员工:
- 平均工资:select avg(sal) from emp;//2073.214286
- (错误)select ename,sal from emp where sal>avg(sal);//ERROR 1111 (HY000): Invalid use of group function无效使用了分组函数,因为SQL语句中有一个语法规则,分组函数不可以直接使用在where子句当中。why???因为group by是在where执行之后才会执行的。
- (正确)select ename,sal from emp where sal > 2073.214286;
- (1+3)select ename,sal from emp where sal > (select avg(sal) from emp);(子查询)
select 5
...
from 1
...
where 2
...
groupby 3
...
having 4
...
order by 6
...
count(*)和count(具体的某个字段):
- count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)
- count(comm):表示统计comm字段中不为NULL的数据总数量。
分组函数也能组合起来用:
- select count(*),sum(sal),avg(sal),max(sal),min(sal),min(sal) from emp;