首页 > 试题广场 >

更新用户积分信息?

[编程题]更新用户积分信息?
  • 热度指数:29474 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现有某公司部分订单数据及用户会员等级数据,如下所示:
订单信息表: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
会员用户如果下订单金额大于100则可获得同订单金额相同数额的积分,请根据这几日订单数据更新用户会员等级表中积分信息。
要求输出:user_id,积分
注:默认现有用户会员等级信息表中积分为未更新状态,并且未获得积分的用户不用输出,最终结果按照积分降序排序。
示例数据结果如下:
user_id point
12 13550
13 6755
11 1935
结果解释:
user_id为10、14、15、16未在这几日下单订,故未获得积分;
其中user_id为11的用户9月1日、2日、3日下订单,订单金额分别为380、100、60,
根据规则仅有9月1日订单可获得380积分,故更新后的积分为1555+380=1935积分;
其他结果同理。
示例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);

输出

user_id|point
12|13550
13|6755
11|1935
头像 牛客题解官
发表于 2025-02-24 15:49:47
精华题解 这道题目要求我们更新用户的积分信息,我们要做的事情如下: 1. 确定总体问题 我们需要根据订单数据更新用户的积分。用户在订单金额大于100时,可以获得与订单金额相同的积分。我们需要从订单信息和用户会员等级信息中提取数据,计算每个用户的总积分,并按积分降序排序。 2. 分析关键问题 筛选有效订单:从 展开全文
头像 wenzo_
发表于 2025-02-12 15:17:38
SELECT o.user_id, point + SUM(order_price) AS point FROM order_tb o JOIN uservip_tb u ON o.user_id = u.user_id WHERE order_price > 100 GRO 展开全文
头像 五首绝句哈
发表于 2025-06-22 22:02:42
WITH temp AS( SELECT b.user_id,b.point,COALESCE(a.total_cost,0) AS total_cost FROM( SELECT user_id,sum(order_price) as total_c 展开全文
头像 在思考的六边形战士很想去旅行
发表于 2025-08-01 15:44:02
# 先用where条件子句过滤掉order_tb表所有金额不超过100的订单 # 另外,表关联以order_tb表为主,这样就不会把uservip_tb表未满足要求的客户关联进来 # 如果在select后用if(,,)去判断,不严密,会出错 # 因为执行顺序是from-where-group-sel 展开全文
头像 妄想追随
发表于 2025-06-20 10:59:36
with a1 as ( select o.user_id,v.point,sum(if(order_price > 100 ,order_price,0)) aa from order_tb o join uservip_tb v on o.user_id = v.user_id grou 展开全文
头像 BraveCoder
发表于 2025-10-20 21:17:44
select a.user_id, (point + add_point) as point from ( select user_id, sum(order_price) as add_point from order_tb where order_price > 1 展开全文
头像 热血的小山竹在加班
发表于 2025-03-31 06:12:42
with t as( select user_id, sum(order_price) as ad from order_tb where order_price>100 group by user_id ) select use 展开全文
头像 蚊抑青年小王
发表于 2025-03-17 11:41:14
select user_id, sum(order_price) + point point from order_tb join uservip_tb using (user_id) where order_price > 100 group by 展开全文
头像 muchenfeng
发表于 2025-06-15 00:32:06
select user_id, point + add_point as point from ( select user_id, sum(order_price) as "add_point" from order_tb where order_price >100 展开全文
头像 Mouse9610
发表于 2025-10-16 10:36:56
select t1.user_id ,point+sum(order_price) as point from order_tb t join uservip_tb t1 on t.user_id=t1.user_id where order_price>100 group by t1.us 展开全文
头像 牛客466955756号
发表于 2025-02-18 12:42:25
select distinct ut.user_id,point+s as point from uservip_tb ut, (select user_id,sum(if(order_price>100,order_price,0)) as s from order 展开全文