查看: 3612| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

SQL 窗口函数LC题目和cheetsheet分享

   
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 飞天兔 于 2021-8-22 01:31 编辑 . From 1point 3acres bbs

LZ平时不用SQL,单纯为了面试把所有LC刷了两编,有挑战题的其实就两种: 窗口函数和自定义函数。自定义函数面试中实用性不高,用的时候容易出错。
但是如果窗口函数不熟练,遇到就会跪,而且是立刻马上,拉都拉不起来。

LZ从LC挑出八道代表题,附上我的答案和考点,值得反复练习。结尾处附上窗口函数的cheetsheet。.

据说给大米的最后都拿到大包 .--

1.        Median (LC 571)
# Median选判条件
  1. select avg(a.number) as median
  2. from(. .и
  3. select number,
  4. sum(Frequency) over(order by number) as pc,
  5. sum(Frequency) over(order by number desc) as nc,
  6. sum(Frequency) over() as tt
  7. rom numbers
  8. as a
  9. where a.pc>=tt/2 and a.nc>=tt/2
复制代码
2.        TOP N (LC 185)
# Row_number (). rank (), 和dense_rank () 区别
  1. with tp as
  2. Select Name, Salary, DepartmentId, .google  и
  3. dense_rank() over(partition by DepartmentId order by Salary desc) as top . 1point 3 acres
  4. from Employee)
  5. select d.Name as Department,tp.Name as Employee,tp.Salary
  6. from tp. Χ
  7. join Department as d
  8. on tp.DepartmentId = d.Id
  9. where tp.top<4
复制代码
3.        Consecutive Numbers (LC 180)
#主键ID不连续. 1point 3 acres
# DF对于连续数字相等
  1. SELECT DISTINCT Num AS CN.1point3acres
  2. FROM (
  3. SELECT *, ROW_NUMBER () OVER (ORDER BY Id) –
  4. ROW_NUMBER () OVER (PARTITION BY Num ORDER BY Id) AS DF
  5.     FROM Logs
  6.     ) as TP
  7. GROUP BY Num, DF
  8. HAVING COUNT (1) >=3
复制代码
4.        Continuous Ranges (LC 1285)
# 连续问题选用lead/lag 函数 或者 id-row_number
  1. SELECT
  2.     MIN(log_id) START_ID,. Waral dи,
  3.     MAX(log_id) END_ID
  4. FROM (
  5.     SELECT
  6.         log_id,
  7.         log_id-ROW_NUMBER () OVER (ORDER BY log_id) DF
  8.     FROM Logs
  9.     ) AS TP
  10. GROUP BY DF. 1point 3acres
  11. ORDER BY 1
复制代码
5.        Consecutive Available Seats (LC 603)
# 连续问题选用lead/lag 函数 或者 id-row_number
  1. select distinct seat_id
  2. from (
  3.     select *,. Χ
  4.         lag(free,1,0) over(order by seat_id) as lg,. ----
  5.         lead(free,1,0) over(order by seat_id) as ld
  6.     from cinema
  7. ) as TP
  8. where free=1 and (lg=1 or ld=1)
  9. order by 1
复制代码
6.        Students Report by Geography (LC 618)
# Row_number () 给列中元素编号
# Group by + 聚合函数 行转列
  1. select
  2. MAX (if (continent="America", name, NULL)) as America,
  3. MAX (if (continent="Asia", name, NULL)) as Asia,
  4. MAX (if (continent="Europe", name, NULL)) as Europe. 1point3acres.com
  5. from (
  6.     select *,
  7.     row_number () over (partition by continent order by name) as rk
  8.     from student
  9.     ) as TP
  10. group by rk
  11. order by rk
复制代码
7.        Students Report by Geography (LC 618)
# Default window: range between unbounded preceding AND current row
  1. select person_name
  2. from (. 1point 3 acres
  3. select person_name,
  4. sum(weight) over(order by turn) as tt
  5. from queue. check 1point3acres for more.
  6. order by turn
  7. ) as tp
  8. where tt<=1000
  9. order by tt desc
  10. limit 1
复制代码
8.        Restaurant Growth (LC 1321). Χ
# Window w 的写法
# Range是逻辑窗口,row是物理窗口,这里要用物理窗口
# limit 6, 100000 # Top 6+ 前六天不算# 窗口函数因为计算问题是不能在where,join中引用的,但是可以在外面套别的函数,比如这题avg外面用了round函数,if函数也是可以的
  1. select visited_on,
  2. sum(tt) OVER w as amount,
  3. round(avg(tt) OVER w,2) as average_amount. Waral dи,
  4. from (
  5.     select visited_on, sum(amount) as tt
  6.     from customer
  7.     group by 1. From 1point 3acres bbs
  8. ) as tp
  9. window w as (ORDER BY VISITED_ON rows between 6 PRECEDING)
  10. limit 6,100000
复制代码
收藏的窗口函数cheetsheet,直接贴链接,不消耗大米-baidu 1point3acres
https://learnsql.com/blog/sql-window-functions-cheat-sheet/


.










. 1point 3 acres


补充内容 (2021-08-30 05:40 +8:00):. Waral dи,
第七题 标题写错了
Last Person to Fit in the Bus (LC 1204)

评分

参与人数 30大米 +36 收起 理由
sunnybunnyx + 1 很有用的信息!
Ivy_0511 + 1 给你点个赞!
huleiming0224 + 1 给你点个赞!
LAP + 1 给你点个赞!
一颗小浮萍 + 1 给你点个赞!

查看全部评分


上一篇:【求Data Science project】
下一篇:DS面试中A/B test部分notes整理(干货)

本帖被以下淘专辑推荐:

全局:
Thank you! Very useful
回复

使用道具 举报

🔗
frescowmz 2021-8-29 13:08:00 | 只看该作者
全局:
感谢!很好用。
回复

使用道具 举报

🔗
LMXTX2012 2021-8-29 13:13:31 | 只看该作者
全局:
楼主这样的好人不赞留着过年吗
回复

使用道具 举报

🔗
小亩_690b73c 2021-10-12 12:18:34 | 只看该作者
全局:
感谢楼主分享
回复

使用道具 举报

🔗
yuyu_wechat 2021-10-25 23:24:43 | 只看该作者
全局:
感謝樓主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表