SQL面试题练习 —— 统计最大连续登录天数区间

目录

  • [1 题目](#1 题目)
  • [2 建表语句](#2 建表语句)
  • [3 题解](#3 题解)

1 题目

2 建表语句

sql 复制代码
CREATE TABLE IF NOT EXISTS user_login_tb (
    uid INT,
    login_date DATE
);
insert into user_login_tb(uid, login_date) values
	( 1, '2022-08-02')
	,(1, '2022-08-03')
	,(2, '2022-08-03')
	,(2, '2022-08-04')
	,(2, '2022-08-05')
	,(2, '2022-08-05')
	,(3, '2022-08-05')
	,(2, '2022-08-06')
	,(4, '2022-08-06')
	,(4, '2022-08-07');

3 题解

sql 复制代码
WITH t AS (SELECT uid,
                  login_date,
                  ROW_NUMBER() OVER (PARTITION BY uid ORDER BY login_date) AS rn
           FROM user_login_tb
           group by uid, login_date -- 一个用户一天可能多次登录
)
SELECT part                AS days_range,
       COUNT(DISTINCT uid) AS user_num
FROM (SELECT uid,
             dd,
             COUNT(*) AS cnd,
             CASE
                 WHEN COUNT(*) < 2 THEN '未连续登录'
                 WHEN COUNT(*) < 4 THEN '连续登录2~3天'
                 WHEN COUNT(*) < 8 THEN '连续登录4~7天'
                 ELSE '连续登录大于7天'
                 END  AS part
      FROM (SELECT *,
                   DATE_SUB(login_date, rn) AS dd
            FROM t) t1
      GROUP BY uid, dd) t2
GROUP BY part
-- 记住sql的执行顺序
-- FROM -> JOIN -> ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT
ORDER BY user_num DESC;

执行结果

相关推荐
Andreapiki1 小时前
数据分析师校招技术备考指南:SQL、Python、统计学、BI学习路径
sql·excel
星空1 小时前
sql查询修改
sql·金蝶
Summer-Bright1 小时前
深度 | 壁仞1.74亿中标智算中心:国产GPU从能用跨进商用,但4.5亿的大单却因凑不齐三家废标了
数据库·ai·国产gpu
云安全助手1 小时前
自建接入VS聚合平台:企业 AI 调用的选型思路与迁移成本拆解
java·大数据·数据库·人工智能·ai大模型
白露与泡影2 小时前
Redis 的“单线程”与“多线程”:一场关于性能与简洁的权衡
数据库·redis·php
白起那么早2 小时前
idea 插件-把数据库的表画出来
数据库·后端·intellij idea
fengkai45452 小时前
十一、MySQL 第 1‑3 章
运维·数据库·mysql
Lancker3 小时前
记一次 Druid 连接 MySQL 报 Communications link failure 的排查过程
数据库·mysql·adb
adinnet20263 小时前
多轮对话与上下文压缩:追问时模型怎么记住前面说的
数据库·microsoft
CarIise3 小时前
Spring Boot整合MyBatis与文件上传:从分层架构到文件上传下载实战
数据仓库·hive·hadoop