0
点赞
收藏
分享

微信扫一扫

【MySQL面试复习】了解过索引吗?(索引的底层原理)/B 树和B+树的区别是什么?

萨摩斯加士奇 2024-03-01 阅读 12

前述

窗口函数相关知识推荐阅读:通俗易懂的学会:SQL窗口函数

题目描述

leetcode 题目:511. 游戏玩法分析 I
在这里插入图片描述
在这里插入图片描述

思路

方法一: min, group by:分组,排序

  1. 不用别名:1242 ms 击败5.08%使用 MySQL 的用户
select player_id, MIN(event_date) as first_login
from Activity
group by player_id;
  1. 用别名:473ms击败56.30%使用 MySQL 的用户
select A.player_id, MIN(A.event_date) as first_login
from Activity A
group by A.player_id;

经过验证:当增加新的列名时,使用别名效率更高。

方法二:窗口函数

--错误示例:报错:Unknown column 'rk' in 'where clause' ,解决:得设个临时表
-- select player_id,event_date,
--     row_number() over (partition by player_id order by event_date) as rk
-- from Activity
-- where rk = 1; 

--正确示范:
select B.player_id, 
       B.event_date as first_login
from (
    select A.player_id,
           A.event_date,
           row_number() over (partition by A.player_id order by A.event_date) as rk
    from Activity A
) B
where B.rk = 1;

方法三: FIRST_VALUE()

-- note: 加上别名A.就不超出时间限制了。可提高效率
select  distinct A.player_id,
        first_value(A.event_date) over(
            partition by A.player_id 
            order by A.event_date
        ) as first_login
from Activity A;
举报

相关推荐

0 条评论