mysql-sql-练习题-4-标记

连续登录2-7天用户

在这里插入图片描述

建表

create table continuous_login(
	user_id1 integer comment '用户id',
	date_login date comment '登陆日期'
) comment '用户登录表';

insert into continuous_login
values
  (1,'2022-01-10'),
  (1,'2022-01-11'),
  (1,'2022-01-13'),
  (1,'2022-01-14'),
  (1,'2022-01-15'),
  (1,'2022-01-16'),
  (1,'2022-01-17'),
  (1,'2022-01-18'),
  (1,'2022-01-19'),
  (2,'2022-01-05'),
  (2,'2022-01-06'),
  (2,'2022-01-07'),
  (2,'2022-01-11'),
  (3,'2022-01-01'),
  (3,'2022-01-03'),
  (3,'2022-01-11');

排名找规律

with tmp as(-- 过滤 保证无重复日期
  select *
  from continuous_login
  group by user_id1,date_login
),
  tmp1 as(-- 日期排名 等差数列
    select
      *,
      dense_rank() over(partition by user_id1 order by date_login) dr
    from continuous_login 
  ),
  tmp2 as(-- 等差 - 等差 =  差一样
    select
      user_id1,
      count(1) days_login_consecutive, -- 连续登录天数
      concat(min(date_login),'/',max(date_login)) date_finish_begin -- 拼接 连续登录起止日期
    from tmp1
    group by user_id1, adddate(date_login,-dr) -- 连续登录日期 等差数列
    having count(1) between 2 and 7 -- 连续登录所有情况中过滤出连续登录2-7天
  )
select -- 输出格式
  user_id1,
  group_concat(days_login_consecutive) days_login_consecutive,
  group_concat(date_finish_begin) date_finish_begin
from tmp2
group by user_id1;

在这里插入图片描述

最大连胜次数

在这里插入图片描述

建表

create table if not exists match1(
	player_id integer unsigned not null default 0 comment '玩家ID',
	match_day date default '1970-01-01' comment '比赛日期',
	result1 varchar(5) comment '比赛结果'
) comment '玩家比赛表';

insert into match1
value
	('1','2022-01-17','Win'),
	('1','2022-01-18','Win'),
	('1','2022-01-25','Win'),
	('1','2022-01-31','Draw'),
	('1','2022-02-08','Win'),
	('2','2022-02-06','lose'),
	('2','2022-02-08','lose'),
	('3','2022-03-30','Win');

只输出连胜结果

with tmp as(-- 日期多次排名 找规律
  select
    player_id,match_day,result1,
    if(result1 = 'Win',1,0) result1_if, -- if标记 为了计数
    dense_rank() over(partition by player_id order by match_day) dr,
    dense_rank() over(partition by player_id,result1 order by match_day) dr1
  from match1
),
  tmp1 as(-- 连续同种结果 差一样
    select
      player_id,
      sum(result1_if) consecutive_count
    from tmp
    group by player_id,dr - dr1
  )
select -- 输出格式
  player_id,
  'Win' result1, -- 比赛结果
  max(consecutive_count) max_consecutive_count -- 最大连胜次数
from tmp1
group by player_id;

在这里插入图片描述

输出所有连续结果

with tmp as(-- 日期多次排名 找规律
  select
    player_id,match_day,result1,
    dense_rank() over(partition by player_id order by match_day) dr,
    dense_rank() over(partition by player_id,result1 order by match_day) dr1
  from match1
)
select -- 连续同种结果 差一样
  player_id,
  any_value(result1) result1, -- 比赛结果
  count(result1) consecutive_count -- 同种结果 连续次数
from tmp
group by player_id,dr - dr1;

在这里插入图片描述

相关推荐

  1. SQL server 数据库练习题及答案(练习4

    2024-04-30 08:12:07       26 阅读
  2. 数据库讲解---(SQL语句--练习题讲解)【MySQL版本】

    2024-04-30 08:12:07       19 阅读
  3. MySQL标准SQL的扩展

    2024-04-30 08:12:07       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 08:12:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 08:12:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 08:12:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 08:12:07       20 阅读

热门阅读

  1. 小米金融守护消费权益,共筑金融和谐新篇章

    2024-04-30 08:12:07       10 阅读
  2. Ajax 解决浏览器缓存问题原理和例子

    2024-04-30 08:12:07       10 阅读
  3. 指数分布、瑞利分布和Nakagami-m的联系

    2024-04-30 08:12:07       10 阅读
  4. 在Mac上使用国内源安装 homebrew

    2024-04-30 08:12:07       11 阅读
  5. elementUI之el-select选择器赋值为空后无法选中回显

    2024-04-30 08:12:07       8 阅读
  6. 介绍一个在数据分析中常用的函数:data.iloc[]

    2024-04-30 08:12:07       14 阅读
  7. Tomcat Bootstrap init()

    2024-04-30 08:12:07       11 阅读
  8. CAPM模型特点

    2024-04-30 08:12:07       9 阅读
  9. Google云平台(Google Cloud Platform,简称GCP)

    2024-04-30 08:12:07       14 阅读
  10. Spring Boot面试知识点总结(经典15问)

    2024-04-30 08:12:07       12 阅读