MySQL中CASE函数的应用:将查询列作为判断条件
创作时间:
作者:
@小白创作中心
MySQL中CASE函数的应用:将查询列作为判断条件
引用
CSDN
1.
https://blog.csdn.net/z_xiao_qiang/article/details/113584576
在数据库查询中,有时需要根据列的值来判断并进行相应的统计或计算。MySQL的CASE函数提供了一种强大的解决方案,可以将查询的列作为判断条件,实现复杂的查询需求。本文通过一个具体的订单统计场景,详细讲解了CASE函数的使用方法,并给出了多个实际应用示例。
场景描述
假设我们有一个订单表order,结构如下:
CREATE TABLE `order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mch_id` varchar(255) DEFAULT NULL COMMENT '商户id',
`device_info` varchar(255) DEFAULT NULL COMMENT '设备号',
`mch_name` varchar(255) DEFAULT NULL COMMENT '商户名称',
`status` varchar(255) DEFAULT NULL COMMENT '状态 0-成功 2-退款 3- 失败',
`amount` varchar(255) DEFAULT NULL COMMENT '交易金额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
表中插入了一些示例数据:
INSERT INTO `xiaoqiang_test`.`order`(`id`, `mch_id`, `device_info`, `mch_name`, `status`, `amount`) VALUES (1, '1', '101', '超市', '0', '1');
INSERT INTO `xiaoqiang_test`.`order`(`id`, `mch_id`, `device_info`, `mch_name`, `status`, `amount`) VALUES (2, '2', '102', '百货', '2', '2');
INSERT INTO `xiaoqiang_test`.`order`(`id`, `mch_id`, `device_info`, `mch_name`, `status`, `amount`) VALUES (3, '3', '103', '菜市场', '3', '3');
查询需求
我们需要查询某日的总交易金额、失败金额和退款金额。
传统方法
使用传统方法,我们需要分别执行以下三条SQL语句:
- 总交易金额查询:
select sum(amount) from `order`;
- 失败金额查询:
select sum(amount) from `order` where status = '3';
- 退款金额查询:
select sum(amount) from `order` where status = '2';
这种方法需要执行多条SQL语句,效率较低。接下来,我们介绍如何使用CASE函数来优化这个查询。
使用CASE函数优化查询
MySQL的CASE函数允许我们将查询的列作为判断条件,从而实现更复杂的查询需求。CASE函数的基本语法如下:
sum(case 属性名 when 属性值1 then 1 else 0 end): 当某个属性下为属性值1就加1个数量,否则就作0统计。sum(case when 条件 then 指定列 else 0 end): 当when后面的条件成立,就将指定列进行求和,否则就作0统计。
使用CASE函数,我们可以将上述三个查询合并为一个:
select
sum(amount) AS '总交易金额',
sum(case when status = '2' then amount ELSE 0 END) AS '退款金额',
sum(case when status = '3' then amount ELSE 0 END) AS '失败金额'
from `order`;
这样,我们就可以通过一条SQL语句获取所有需要的数据。
CASE函数的其他应用场景
除了上述示例,CASE函数还有其他多种应用场景:
简单CASE函数
case `gender`
when 1 then '男'
when 2 then '女'
else '未知'
end
CASE搜索函数
case
when gender = 1 then '男'
when gender = 2 then '女'
else '未知'
end
通过这些示例,我们可以看到CASE函数在实际项目中的广泛应用。它不仅可以用于数值计算,还可以用于字符串转换等场景,极大地提高了SQL查询的灵活性和效率。
热门推荐
蒸鱼是先浇油还是先放蒸鱼豉油
最接近李长歌的历史原型:排行十四的衡阳长公主,下嫁阿史那社尔
心脏的力不从心—心力衰竭
光伏离网系统蓄电池几个冷知识
手术后排气是什么意思
智能型挖掘机:传统工程机械的智能化升级
制作衣服需要哪些材料?新手必看的服装制作指南
圆梦之战!U20国足拼了:赢球=晋级世青赛,需严防C罗队友
有血管瘤有什么症状
香蕉和芭蕉的区别
股市中内盘的定义是什么?内盘数据对股市分析有何帮助?
福建旅游景点攻略自由行,福建自助游:旅游路线推荐及注意事顿
教资面试:民法典结构化学习指南
皮夹克怎么保养:正确的皮夹克保养及清洗方法
排开能绕地球两周半,分裂了70年的海拉细胞,给人类带来了什么?
车前草和车前子有什么区别?
葡萄酒选什么葡萄
安装心脏支架只是治疗的开始,远远不是结束
数学中平行线和角度关系
企业职工伤亡事故分类标准怎么划分?
半月板修复手术后如何进行康复锻炼
小孩叛逆期一般在什么年龄段
揭秘春之绚烂:为何大部分花朵选择春天绽放?
ETF基金与LOF基金的区别
超越自我:心理学视角下的自我接纳与成长
张家港凤凰山景区游玩攻略:景点介绍、交通指南与住宿推荐
渗透工程师的岗位职责是什么?
外贸巴西:开拓南美最大市场的潜力
集市售卖"白纸"挂面,经整改后符合规定
全球十大创意儿童乐园设计案例:互动体验与主题创意的完美融合