MySQL复习记录【二】:流程控制函数

本文详细介绍了SQL中的流程控制函数,包括`IF`、`CASE`的使用方式,以及如何实现类似`switch-case`的效果。同时,讲解了分组函数如`SUM`, `AVG`, `MAX`, `MIN`, `COUNT`的功能和应用场景,强调了它们在统计和分组查询中的作用。文章还探讨了`COUNT`函数的不同用法以及在不同存储引擎下的效率,并提供了多个分组查询的实际案例,展示了`GROUP BY`和`HAVING`子句的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流程控制函数

# 1.if 函数,if else
SELECT IF(commission_pct IS NULL, '没奖金 呵呵', '有奖金 嘻嘻') AS 备注
FROM employees;

# 2.case 函数的使用一:switch case的效果
/*
java中的选择语句
switch(){
	case 常量1:语句1; break;
	...
	default:语句n;break;
}

MySQL中
case 要判断的字段或表达式
when 常量1 then 要显示的值1或者语句1;
...
else 要显示的值n或者语句n;
end
*/

SELECT salary, department_id,
 CASE department_id
 WHEN 30 THEN salary*1.1
 WHEN 40 THEN salary*1.2
 WHEN 50 THEN salary*1.5
 ELSE salary
 END AS 新工资
 FROM employees;
 
 # 3. case 函数的使用二:类似于 多重if
/*
case 
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
...
else 要显示的值n或者语句n
end
*/

# 查询员工的工资情况:工资>20000,显示A级别;工资>15000,显示B级别
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees;

分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计算个数

参数支持哪些类型:

  1. sum, avg一般用于处理数值型;max, min, count可以处理任何类型;
  2. 以上分组函数都忽略null值:
  3. 可以和distinct搭配使用,实现去重;
  4. 和分组函数一同查询的字段有限制,一般要求是group by后的字段;

count函数的详细介绍

  • count(字段)
  • count(*):只要有一行不为null就加1
  • count(1):统计函数

效率:
MYISAM存储引擎下,count()的效率最高
INNODB存储引擎下,count(
)和count(1)效率差不多

案例:查询员工表中最大入职时间和最小入职时间的相差天数(diffrence)

SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) DIFFRENCE
FROM employees;

分组查询

Group By基本语法

SELECT column,group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column]
注意:
查询列表比较特殊,要求是分组函数或者group by后出现的字段

特点:
1、分组查询中的筛选条件分为两类
			数据源			位置			关键字
分组前筛选	原始表			group by子句前	where
分组后筛选	分组后的结果集	group by子句后	having1)分组函数做条件肯定放在having子句中;
(2)能用分组前筛选的优先使用分组前筛选

案例

# 查询每个部门的平均工资
SELECT AVG(salary)
FROM employees
GROUP BY department_id;

# 查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;

# 查询哪个部门的员工数大于5
#1.查询每个部门的员工个数;
#2.根据1的结果进行筛选

SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;

# 查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个
SELECT manager_id,MIN(salary)
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000;

# 按表达式或函数分组

# 案例:按照员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>的有哪些
SELECT COUNT(*),LENGTH(last_name) len_name
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*)>5;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值