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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值