回忆是一座桥
却是通往寂寞的牢

SQL案例 - 统计各等级会员用户下订单总额

描述

现有某公司部分订单数据及用户会员等级数据,如下所示:

订单信息表:order_tb(订单id-order_id,用户id-user_id,订单金额-order_price,订单创建时间-order_time)

order_id user_id order_price order_time
101 11 380 2022-09-01 09:00:00
102 12 200 2022-09-01 10:00:00
103 13 260 2022-09-01 12:00:00
104 11 100 2022-09-02 11:00:00
105 12 150 2022-09-02 12:00:00
106 12 1200 2022-09-02 13:00:00
107 11 60 2022-09-03 09:00:00
108 13 380 2022-09-03 09:30:00

会员等级信息表:uservip_tb(用户id-user_id,会员等级-vip,积分-point)

user_id vip point
10 银卡会员 530
11 银卡会员 1555
12 钻石会员 12000
13 金卡会员 6115
14 普通会员 230
15 银卡会员 810
16 普通会员 330

请统计每个会员等级的订单总额。
要求输出:会员等级,订单总额
注:如果存在某一会员等级的用户没有下订单也需要输出该会员等级,订单总额记录为0,

输出结果按照订单总额降序排序

示例数据结果如下:

vip order_total
钻石会员 1550
金卡会员 640
银行会员 540
普通会员 0

结果解释:

由用户会员等级信息表可知,钻石会员用户有12,该用户这几日共计下订单总额为1550,其他结果同理;

其中普通会员用户14、16没有下订单,故订单总额为0。

示例1

输入:

drop table if exists  `order_tb` ; 
CREATE TABLE `order_tb` (
`order_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`order_price` int(11) NOT NULL,
`order_time` datetime NOT NULL,
PRIMARY KEY (`order_id`));
INSERT INTO order_tb VALUES(101,11,380,'2022-09-01 09:00:00'); 
INSERT INTO order_tb VALUES(102,12,200,'2022-09-01 10:00:00'); 
INSERT INTO order_tb VALUES(103,13,260,'2022-09-01 12:00:00'); 
INSERT INTO order_tb VALUES(104,11,100,'2022-09-02 11:00:00'); 
INSERT INTO order_tb VALUES(105,12,150,'2022-09-02 12:00:00'); 
INSERT INTO order_tb VALUES(106,12,1200,'2022-09-02 13:00:00'); 
INSERT INTO order_tb VALUES(107,11,60,'2022-09-03 09:00:00'); 
INSERT INTO order_tb VALUES(108,13,380,'2022-09-03 09:30:00'); 

drop table if exists  `uservip_tb` ; 
CREATE TABLE `uservip_tb` (
`user_id` int(11) NOT NULL,
`vip` varchar(16) NOT NULL,
`point` int(11) NOT NULL,
PRIMARY KEY (`user_id`));
INSERT INTO uservip_tb VALUES(10,'银卡会员',530); 
INSERT INTO uservip_tb VALUES(11,'银卡会员',1555); 
INSERT INTO uservip_tb VALUES(12,'钻石会员',12000); 
INSERT INTO uservip_tb VALUES(13,'金卡会员',6115); 
INSERT INTO uservip_tb VALUES(14,'普通会员',230); 
INSERT INTO uservip_tb VALUES(15,'银卡会员',810); 
INSERT INTO uservip_tb VALUES(16,'普通会员',330);

输出:

vip|order_total
钻石会员|1550
金卡会员|640
银卡会员|540
普通会员|0

答案

解法1:

select
    u.vip,
    ifnull(sum(o.order_price),0) order_total
from
    uservip_tb u
    left join order_tb o on u.user_id=o.user_id
group by
    u.vip
order by order_total desc;

*本案例来自牛客网,但答案为原创,如有雷同纯属巧合*

未经允许不得转载:夕枫 » SQL案例 - 统计各等级会员用户下订单总额
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论