流程控制语句&聚合函数

80 阅读2分钟

流程控制语句:选择结构

概念:就是根据某个判断条件,如果该条件满足,就执行代码1,否则执行代码2

关键字:case when then else end

语法:

select case 字段名 when 值1 then 值2 else 值3 end from 表名

执行流程:

根据case字段名的值 和when后面的值进行对比,如果相同就执行then后面的值2,如果不同执行else值3

类似java中的switch语句

-- 查询职业英文显示对应的中文
select ename, case job 
  when "manager" then '经理' 
  when "salesman" then '销售'
  else "其他员工" end,job 
from emp;

if语句

关键字:if(arg1,arg2,arg3)

执行流程: 如果arg1为0 或者null 或者空字符串 或者false 则返回arg3 否则返回arg2

类似java三目运算符 a>b?a:b

select if(0,1,2); -- 2
select if(1,1,2); -- 1
select if(null,1,2); -- 2
select if(false,1,2); -- 2
select if("",1,2); -- 2
select if(" ",1,2); -- 2
select if("1",1,2); -- 1
select if(-1,1,2); -- 1

ifnull语句(很重要)

关键字:ifnull(arg1,arg2);

执行流程:如果arg1不是null,就返回arg1,否则返回arg2

select ifnull(null,10); -- 10
select ifnull(123,10); -- 123
-- mysql里面null和任何数运算结果还是null
select null+8; -- null
select null+"123"; -- null

聚合函数:

avg 平均数

max 最大

min 最小

sum 求和

count 总记录数

-- 查看公司员工的平均收入(sal+comm)是多少???  
select avg(sal+comm) from emp;  -- 1950  逻辑不对,comm存在null,而null+sal的话结果是null
select avg(sal+ifnull(comm,0))from emp;  -- 2043.18
-- 查看收入最高的员工
select max(sal+ifnull(comm,0)) from emp; -- 正确
select max(sal+comm) from emp;  -- 2650 逻辑不对
-- 查看30号部门人的工资总和
select sum(sal+ifnull(comm,0)),deptno from emp where deptno = 30; 
-- 查看20号部门中,底薪超过2000元的人数?
select count(*) from emp where sal>2000 and deptno = 20;

count(*) count(1) 一样,推荐用count(1) 阿里的开发手册是推荐用count(1)

count(字段) 会忽略null值得统计

select count(*) from emp; -- 11
select count(1) from emp; -- 11 
select count(ename) from emp; -- 11
select count(comm) from emp;  -- 4