首页 > 试题广场 >

某宝店铺连续2天及以上购物的用户及其对应的天数

[编程题]某宝店铺连续2天及以上购物的用户及其对应的天数
  • 热度指数:48049 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
11月结束后,小牛同学需要对其在某宝的网店就11月份用户交易情况和产品情况进行分析以更好的经营小店。
11月份销售数据表sales_tb如下(其中,sales_date表示销售日期,user_id指用户编号,item_id指货号,sales_num表示销售数量,sales_price表示结算金额):
sales_date user_id item_id sales_num sales_price
2021-11-01 1 A001 1 90
2021-11-01
2 A002 2 220
2021-11-01
2 B001 1 120
2021-11-02
3 C001 2 500
2021-11-02
4 B001 1 120
2021-11-03
5 C001 1 240
2021-11-03
6 C002 1 270
2021-11-04
7 A003 1 180
2021-11-04
8 B002 1 140
2021-11-04
9 B001 1 125
2021-11-05
10 B003 1 120
2021-11-05
10 B004 1 150
2021-11-05
10 A003 1 180
2021-11-06
11 B003 1 120
2021-11-06
10 B004 1 150
请你统计连续2天及以上在该店铺购物的用户及其对应的次数(若有多个用户,按user_id升序排序),以上例子的输出结果如下:
user_id days_count
10 2

示例1

输入

drop table if exists sales_tb;
CREATE TABLE sales_tb(
sales_date date NOT NULL,
user_id int(10) NOT NULL,
item_id char(10) NOT NULL,
sales_num int(10) NOT NULL,
sales_price int(10) NOT NULL
);

INSERT INTO sales_tb VALUES('2021-11-1', 1, 'A001',  1, 90);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'A002',  2, 220);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-2', 3, 'C001',  2, 500);
INSERT INTO sales_tb VALUES('2021-11-2', 4, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-3', 5, 'C001',  1, 240);
INSERT INTO sales_tb VALUES('2021-11-3', 6, 'C002',  1, 270);
INSERT INTO sales_tb VALUES('2021-11-4', 7, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-4', 8, 'B002',  1, 140);
INSERT INTO sales_tb VALUES('2021-11-4', 9, 'B001',  1, 125);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B004',  1, 150);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-6', 11, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-6', 10, 'B004',  1, 150);

输出

10|2
头像 J青
发表于 2022-05-01 11:24:11
要解决这类问题,首要搞清楚 A.如何证明时间是连续的 B.如何把连续的时间抽出来 C.如何限制连续的时间是多久 以SQL29 某宝店铺连续2天及以上购物的用户及其对应的天数为例 · A.如何证明时间是连续的 这个首先需要①排序 with a as( select user_id, sales_da 展开全文
头像 王尼玛呢
发表于 2022-01-29 19:45:34
连续类的问题 按照判断连续的字段(这里是日期)加上编号(以用户为分区字段,日期排序)。(这里存在同一个日期多个购买记录,所以用dense_rank编号最合适) 将编号和日期相减,如果连续的话,差值会相等 再count做出来的差值,就可以知道连续的次数 SELECT user_id,COUNT( 展开全文
头像 盐咸咸
发表于 2022-04-11 15:04:56
3行代码搞定 一、题意解读和解题步骤 1、题意理解 题目:统计连续2天及以上在该店铺购物的用户及其对应的次数 这题的难点在于如何判断连续。 做过之前如果忘了可以点击这里:真题SQL12连续签到 基本上就会做这道题了。 判断连续日期的方 展开全文
头像 牛客862942319号
发表于 2022-09-01 22:29:19
看了答案,大部分人都遗漏了一个关键点,是通一个客户是可以有连续2天和连续2天以上的不同情况,这种需要在做一次聚合筛选,才是最完整的步骤。 比如用户 a 1 2 3   56 号分别购物了,那么客户a满足条件的是连续购物2天和连续购物3天的情况同时存在。如果不在做一次聚合的话 展开全文
头像 阿翟啊
发表于 2021-11-30 21:25:56
select user_id , count(*) days_count from (select user_id, sales_date, ROW_NUMBER() over (partition by user_id order by sales_date 展开全文
头像 亲爱的暴躁的热心网友皮皮文
发表于 2021-12-16 17:09:39
主要信息 sales_tb(sales_date表示销售日期,user_id指用户编号) 求用户连续下单次数 问题拆解 总体思路 如何判断是否连续:是否连续例如1月10号、1月11号、1月12号、1月14号,行数分别为1、2、3、4,日期数-行数分别为1月9号、1月9号、1月9号、1月10号, 展开全文
头像 求求给个offer吧好吗
发表于 2022-03-31 09:48:29
连续问题我感觉我已经彻底悟了,嘻嘻,开心 --用row_number排序 select sales_date ,user_id ,ROW_NUMBER()over(PARTITION BY user_id ORDER BY sales_date) rk from sales_tb --作差 展开全文
头像 细雨噜噜噜
发表于 2021-12-12 16:10:41
SELECT user_id, COUNT(date_rk_diff) days_count FROM (SELECT user_id, DATE_SUB(sales_date, INTERVAL rk DAY) date_rk_diff FROM (SELECT user_id, sales 展开全文
头像 offer正在赶来的路上_
发表于 2023-06-16 16:14:08
select t2.user_id, count(distinct t2.sales_date)+1 as days_count from sales_tb as t1,sales_tb as t2 where t1.user_id = t2.user_id and datediff 展开全文
头像 酸菜鱼土豆大侠
发表于 2022-11-02 22:01:47
【场景】:连续记录 【分类】:分组条件查询、窗口函数 分析思路 难点: 1.如何表示连接?连续的表示: 日期减去排序的值相等 2.记得先对日期、用户去重 (1)对用户、日期进行去重 [使用]:distinct (2)统计日期、用户、日期减去排序的值(连续签到) 连续的表示: 日期减去排序的值 展开全文