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查询的灵活性和效率。
热门推荐
上海至厦门只需6小时!G1655次列车最新行程全攻略
冬游厦门:南普陀寺祈福、鼓浪屿漫步,邂逅不一样的海上花园
上海南站高铁开通!从上海到厦门更便捷
壁挂炉比例阀不吸合,具体故障原因和解决办法
佛教超度:如何抚慰逝者家属的心灵?
广州大厨教你炖排骨汤,去腥绝招曝光!
冬至必备:快速炖出鲜美排骨汤!
七七期超度:佛教生死观揭秘
气血两虚与中医滋补之道
儿歌®益生菌:正确理解其作用与限制
中国食品科学技术学会推荐:益生菌摄入量与肠道健康
养成良好的卫生习惯,享受健康的人生之旅
手卫生的5个指征及两三前后是什么
溧阳1号公路:365公里自驾天堂,串联220个景点的江南最美公路
不开刀,小如胶囊大小的起搏器,为90岁老人心脏再提供30年强劲动力
古人是怎样通信的
长知识丨古人为何用“鸿雁”代称书信
高血压患者的运动指南:科学健身“三个三”原则
如何给冰箱除霜除冰?
冰箱结冰问题处理方法及注意事项
冰箱抽屉冻住拉不开怎么办?实用解决方案与预防措施
2024年台网综艺节目三大题材创作新象
30R电阻器:电路中的小巨人
秋冬养胃新宠:山药山楂饼
秋冬养胃神器:山楂这样做最有效!
秋季养生必备:山楂食疗方大揭秘!
中国航空充电宝登机规定:详解携带要求与计算公式
高铁、飞机充电宝携带规定是什么?
《亚刻奥特曼》最强BOSS基尔巴格:丑萌猪头怪兽引发热议
拐卖儿童犯罪背后的司法与观念战争