MySQL⼀条SQL语句查询多条统计结果
 商城项⽬难免会遇到⽤户个⼈中⼼页查询不同状态订单数量的问题。当然这个问题并不难,可以写⼀个DAO层⽅法,以状态作为⼊参,每次传⼊不同状态值依次查询相应状态的订单数量。
 今天在写H5端接⼝时,我想换种⽅式查,也就是通过⼀条SQL查询出多个状态的订单数量。在⽹上搜了搜,⽅法可⾏,所以就尝试了下,果不其然成功了。
 ⽰例如下(数据只为演⽰今天的问题,表设计并不严谨。勿怪):
SET FOREIGN_KEY_CHECKS=0;
------------------------------
-- Table structure for mini_test_order
------------------------------
DROP TABLE IF EXISTS`mini_test_order`;
CREATE TABLE`mini_test_order`(
`id`int(11)NOT NULL,
`order_no`varchar(32)DEFAULT NULL COMMENT'订单号',
`user_id`int(11)DEFAULT NULL COMMENT'⽤户id',
`shop_id`int(11)DEFAULT NULL COMMENT'商家id',
`order_status`tinyint(1)DEFAULT NULL COMMENT'订单状态',
`create_time`int(10)DEFAULT NULL COMMENT'创建时间',
PRIMARY KEY(`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
------------------------------
-- Records of mini_test_order文本编辑器quick
------------------------------
INSERT INTO`mini_test_order`VALUES('1','aaaaaaaaa','11','111','1','1573041313');
INSERT INTO`mini_test_order`VALUES('2','bbbbbbbb','11','222','1','1573041313');
INSERT INTO`mini_test_order`VALUES('3','cccccccccc','11','333','2','1573041313');
INSERT INTO`mini_test_order`VALUES('4','dddddddd','11','222','3','1573041313');
INSERT INTO`mini_test_order`VALUES('5','eeeeeeeee','11','111','4','1573041313');
INSERT INTO`mini_test_order`VALUES('6','ffffffffffffff','11','111','3','1573041313');
高中数学幂函数公式INSERT INTO`mini_test_order`VALUES('7','gggggggg','11','222','4','1573041313');
INSERT INTO`mini_test_order`VALUES('8','hhhhhhhhh','11','111','4','1573041313');
INSERT INTO`mini_test_order`VALUES('9','iiiiiiiiiiiiiiiiiii','11','333','3','1573041313');
INSERT INTO`mini_test_order`VALUES('10','jjjjjjjjjjjjjjjjjj','11','222','1','1573041313');
核⼼SQL语句如下:
SELECT COUNT(CASE order_status WHEN1THEN1END)AS"状态1",COUNT(CASE order_status WHEN2THEN1END)AS"状态2",COUNT(CASE ord er_status WHEN3THEN1END)AS"状态3",COUNT(CASE order_status WHEN4THEN1END)AS"状态4"FROM`mini_test_order`;
全国大学生计算机二级c语言题库
或如下:
SELECT COUNT(CASE WHEN order_status =1THEN1END)AS"状态1",COUNT(CASE WHEN order_status =2THEN1END)AS"状态2",COUNT(CASE WHEN order_status =3THEN1END)AS"状态3",COUNT(CASE WHEN order_status =4THEN1END)AS"状态4"FROM`mini_test_order`;
当然,SQL语句不仅仅局限于上述两种写法,喜欢探究的童靴欢迎留⾔补充。
MySQL的case when的语法有两种
registar1.简单函数
 CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
2.搜索函数
mysql面试题sql语句多表联查
 CASE WHEN [expr] THEN [result1]…ELSE [default] END
两者区别
 前者枚举col_name这个字段值为符合条件value1时所有可能的值;
truncate table报错
 后者可以写判断,并且搜索函数只会返回第⼀个符合条件的值,其他case被忽略。
拓展
 模拟⼀个这样的需求,⽐如说有⼀张客户表tab_user(字段为:id—客户id、name—姓名、sale_id—销售⼈员id、source—客户来源APP或PC),查出每个销售⼈员有⼏个客户并且这些客户中有多少是来⾃APP的,⼜有多少是来⾃PC的。答案请留⾔中哦,如果你⾃⼰也想出了答案,可以在⽂章底部留⾔。
关注上⽅⼆维码,查看更多精彩内容

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。