MySQL (五) 内置函数之 流程控制、组函数

(一)流程控制

select xx,xx,
case 
when  x(条件)x   then   yyy
when  x条件x   then   zzz
else   aaaa
end as  xxx
from xxx(表名);

实例一

SELECT ename,sex,

case 
when sex=1 then '男'
when sex=0 then '女'
else '其他'
end as sex

from emp;

在这里插入图片描述

实例二

 将员工按薪水划分等级,薪水小于 1000 等级一,薪水小于 3000 大于1000  等级二, 薪水小于5000 大于3000 等级三,
select ename,sal,
case
when sal<1000 then '等级一'
when       1000<=sal<3000  then '等级二'
when          3000 <= sal <5000 then '等级三'
else  '等级四'

end as sal 
from emp;

在这里插入图片描述

(二)组函数

(1)count( )

count统计所有的员工数
select count(*) from emp where 1=1; # 16

select count(1) from emp where 1=1; # 16  #推荐

select count(empno) from emp where 1=1; # 16
存在佣金的员工数 会自动去除 NULL
select count(comm) from emp where 1=1; # 4

select count(1) from emp where 1=1 and comm is not null; # 4
统计 部门编号 30的员工个数
select count(1) from emp where deptno=30;  #6
统计 存在员工的部门数量
select count(distinct deptno) from emp where 1=1 ; #3
 统计 10和20 部门 多少人
select count(1) from emp where DEPTNO in (10,20);

(2)max/min

查询所有员工的最高薪水,最低薪水,员工总数

select max(sal),min(sal),count(1) from emp where 1=1;  # 8989	800	16
查询最高薪水的员工名称以及薪水,用到了子查询
# 使用组函数查询时,所有的列都会返回查询到的第一个值。

select ename,sal,max(sal) as m  from emp where 1=1 and sal = m; #不对 错误写法

select ename,sal from emp where sal in (SELECT max(sal) FROM emp) and 1=1;

(3)sum

查询10 部门的工资总和

select sum(sal) from emp where deptno=10 and 1=1;
统计 所有员工佣金总和,会自动去除 null 值
select sum(comm) from emp where 1=1;

(4)avg

查询 工资低于 平均工资得员工编号,姓名,及工资
select empno,ename,sal from emp where sal < (select avg(sal) from emp) and 1=1;
查询 高于本部门平均薪水的员工姓名
select deptno,ename,sal  from emp as e1 where 1=1 and sal>
(select avg(sal) from emp as e2 where e1.deptno = e2.deptno and 1=1);

#out
/*
30	ALLEN	1600
20	JONES	2975
30	BLAKE	2850
20	SCOTT	3000
10	KING	5000
20	FORD	3000
*/
#同上, 只不过是 分开计算各个部门,帮助理解上边的代码
select deptno,ename,sal  from emp as e1 where 1=1 and sal>
(select avg(sal) from emp as e2 where DEPTNO=20 and 1=1) and DEPTNO=20;

/*
20	JONES	2975
20	SCOTT	3000
20	FORD	3000
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值