【sql使用】case语句使用实例

  1. case定义

类别:条件表达式(待定)

用途:用于条件判断后输出;

经典语法为

case
when 条件1 then 结果1
when 条件2 then 结果2
when 条件3 then 结果3
else 结果4 end

已有数据表 order,表结构为
| id | order_code | user_id | create_time | price | pay_status | pay_time |
|–|–|–|–|–|–|–|–|–|
| | | | | | | | | |
数据见下图,表架构代码见本文末尾
【sql使用】case语句使用实例_第1张图片

  1. 实操
    2.1 查询特殊日期、非特殊日期创建的订单数量,预期效果如下
2月14日情人节当天创建的订单数量 其他日期创建的订单数量

代码如下

SELECT 
COUNT(case WHEN date(create_time) = '2022-02-14' THEN order_code ELSE NULL END) AS `2月14日创建的订单数`,
COUNT(case WHEN date(create_time) <> '2022-02-14' THEN order_code ELSE NULL END) AS `其他日期创建的订单数`
FROM `order`

查询结果:
在这里插入图片描述
数据校验结果:通过

2.2 查询创建订单后,2小时内支付的订单数量,与2小时外支付的订单数量,预期效果如下:

2小时内支付的订单数量 2小时外支付的订单数量
代码如下
SELECT
	COUNT( CASE WHEN sx = 1 THEN sx ELSE NULL END ) AS `2小时内支付订单数量`,
	COUNT( CASE WHEN sx = 2 THEN sx ELSE NULL END ) AS `2小时外支付订单数量` 
FROM
	(
	SELECT
		( CASE WHEN UNIX_TIMESTAMP( pay_time )- UNIX_TIMESTAMP( create_time )<= 7200 THEN 1 ELSE 2 END ) AS sx 
	FROM
		`order` 
	WHERE
		pay_time IS NOT NULL 
	) AS temp;

效果如下:
在这里插入图片描述
非转置版:

SELECT
	sx AS `时效`,
	COUNT( sx )订单数量 
FROM
	(
	SELECT
		( CASE WHEN UNIX_TIMESTAMP( pay_time )- UNIX_TIMESTAMP( create_time )<= 7200 THEN '2小时内支付' ELSE '2小时外支付' END ) AS sx 
	FROM
		`order` 
	WHERE
		pay_time IS NOT NULL 
	) AS t 
GROUP BY
	sx;

效果如下
在这里插入图片描述

== 以下是order表的构建代码 ==================================================

CREATE TABLE `order`    -- 创建表`order`

(id int NOT NULL,  -- id为整形,不可为空
order_code nvarchar(255) NOT NULL,		-- 订单编号为字符型,最大长度255个字符,不可为空
user_id nvarchar(255) NOT NULL,			-- 用户id为字符型,最大长度255个字符,不可为空
create_time Datetime NOT NULL,			-- 订单创建时间为字符型,最大长度255个字符,不可为空
price float(10,2) NOT NULL,			-- 订单金额为字符型,最大长度255个字符,不可为空
pay_status nvarchar(255),  -- 0待支付,1已支付
pay_time Datetime)			-- 支付时间可为空;



			INSERT INTO `order`		-- 向表order插入10条数据
			(id,order_code,user_id, create_time,price,pay_status,pay_time) VALUES
			(31,'6589436056','78495','2022-02-03 16:23:14',100,1,'2022-02-03 18:23:14'),
			(32,'9375968693','9866','2022-02-03 17:22:25',168.1,1,'2022-02-04 18:11:19'),
			(33,'6595689721','4925','2022-02-05 16:23:14',200,0,null),
			(34,'4589436056','78495','2022-02-09 07:13:11',400,1,'2022-02-10 11:09:13'),
			(35,'2358969054','459','2022-02-14 19:01:34',580.22,0,null),
			(36,'1589458956','43588','2022-02-14 11:55:23',68.5,1,'2022-02-14 17:22:25'),
			(37,'6385946896','3244334','2022-02-19 18:11:34',500,1,'2022-02-19 21:15:31'),
			(38,'7765875858','459','2022-02-20 19:25:17',100,0,null),
			(39,'6789358602','24556','2022-02-21 7:25:17',108.3,0,null),
			(40,'2489345758','34913','2022-02-22 23:22:10',96,0,null)

你可能感兴趣的:(笔记,dba)