MySQL的条件判断函数
1、CASE WHEN 条件判断函数
CASE WHEN 语句能在 SQL 语句中织入判断逻辑, 类似于 Java 中的 if else 语句。它分为简单函数和条件表达式
1.1. 简单函数
下面通过一个简单的示例来看一下具体用法,表 user_biz_info
需求说明:在 user_biz_info表中,sex = 1 表示男性,sex = 0 表示女性,查询时转换成汉字显示
SELECT gender, username,( CASE gender WHEN 1 THEN '男' ELSE '女' END ) AS sex
FROM
user_biz_info
1.2.条件表达式
下面通过一个简单的示例来看一下具体用法,表 finance_order_detail
SELECT
sub_order_sn,
settle_price,
settle_type,
( CASE WHEN settle_type = 2 THEN '底价供货' WHEN settle_type = 1 THEN '扣点' WHEN settle_type = 3 THEN '自营买断' END ) AS test_type
FROM
finance_order_detail
或者
SELECT
sub_order_sn,
settle_price,
settle_type,
( CASE WHEN settle_type = 2 THEN '底价供货' WHEN settle_type = 1 THEN '扣点' else '自营买断' END ) AS test_type
FROM
finance_order_detail
1.3. 结合使用
CASE WHEN 和聚合函数综合使用,能实现更加复杂的统计功能
需求:统计不同指标类型对应的数量,以及订单数为1的数量
SELECT
SUM(CASE WHEN target_id = 'O3' THEN 1 ELSE 0 END ) AS 数量3,
SUM(CASE WHEN target_id = 'O1' THEN 1 ELSE 0 END ) AS 数量1,
SUM(case WHEN target_id='O2' and order_num=1 THEN 1 ELSE 0 END) as 数量2
from dwd_month_order_num
1.4.IF() 条件判断函数
-- expr 是一个条件表达式,如果结果为 true,则返回 result_true,否则返回 result_false
IF(expr, result_true, result_false)
实例:
SELECT
`name`,
IF( sex = 1, '男', '女' ) AS sex
FROM
score
if函数也可以和聚合函数一起使用
select num ,
sum(if (sex=1,1,null)) as 女生人数,
sum(if (sex=0,1,null)) as 男生人数
from score
1.5.ifnull条件判断函数
IFNULL(expr1, expr2),如果 expr1 的值为 null,则返回 expr2 的值,如果 expr1 的值不为 null,则返回 expr1 的值
SELECT IFNULL(NULL,'B'); -- 输出结果:B
SELECT IFNULL('HELLO','B'); -- 输出结果:HELLO
使用语法如下
select IFNULL(gmt_last_active,0) gmt_last_active from user_biz_info where nickname= '用户1'
但使用 IFNULL 语句,如果 where 条件中的 name 值是不存在的,那么仍将返回 NULL
1.6.ifnull函数结合聚合函数使用
-- 返回结果:0
SELECT IFNULL(SUM(price), 0) FROM goods WHERE status = 3
其他 AVG、COUNT 等用同样方式处理,而且无论 where 条件存在不存在,结果都是会返回 0 的
1.7.NULLIF() 条件判断函数
NULLIF(expr1, expr2),如果 expr1 = expr2 成立,那么返回值为 null,否则返回值为 expr1 的值;
SELECT ISNULL(NULL); -- 输出结果:1
SELECT ISNULL('HELLO'); -- 输出结果:0
1.8.ISNULL() 条件判断函数
ISNULL(expr),如果 expr 的值为 null,则返回 1,如果 expr1 的值不为 null,则返回 0
SELECT ISNULL(NULL); -- 输出结果:1
SELECT ISNULL('HELLO'); -- 输出结果:0
