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

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

   
全局:

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

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

x
本帖最后由 飞天兔 于 2021-8-22 01:31 编辑 .1point3acres

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

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

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

1.        Median (LC 571)
# Median选判条件
  1. select avg(a.number) as median
  2. from(. 1point 3 acres
  3. select number, . 1point 3acres
  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,
  3. dense_rank() over(partition by DepartmentId order by Salary desc) as top .--
  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不连续
# DF对于连续数字相等
  1. SELECT DISTINCT Num AS CN
  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 . Waral dи,
  8. HAVING COUNT (1) >=3
复制代码
4.        Continuous Ranges (LC 1285) .--
# 连续问题选用lead/lag 函数 或者 id-row_number
  1. SELECT
  2.     MIN(log_id) START_ID,
  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. 1point3acres
  9.     ) AS TP
  10. GROUP BY DF
  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,. 1point3acres.com
  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,.1point3acres
  3. MAX (if (continent="Asia", name, NULL)) as Asia,
  4. MAX (if (continent="Europe", name, NULL)) as Europe
  5. from (
  6.     select *,
  7.     row_number () over (partition by continent order by name) as rk. check 1point3acres for more.
  8.     from student
  9.     ) as TP. 1point3acres.com
  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 (
  3. select person_name,
  4. sum(weight) over(order by turn) as tt. From 1point 3acres bbs
  5. from queue
  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是物理窗口,这里要用物理窗口. 1point 3acres
# limit 6, 100000 # Top 6+ 前六天不算# 窗口函数因为计算问题是不能在where,join中引用的,但是可以在外面套别的函数,比如这题avg外面用了round函数,if函数也是可以的
  1. select visited_on,
  2. sum(tt) OVER w as amount,-baidu 1point3acres
  3. round(avg(tt) OVER w,2) as average_amount
  4. from (
  5.     select visited_on, sum(amount) as tt
  6.     from customer
  7.     group by 1
  8. ) as tp
  9. window w as (ORDER BY VISITED_ON rows between 6 PRECEDING)
  10. limit 6,100000
复制代码
收藏的窗口函数cheetsheet,直接贴链接,不消耗大米
https://learnsql.com/blog/sql-window-functions-cheat-sheet/
. 1point 3 acres












-baidu 1point3acres

.google  и
补充内容 (2021-08-30 05:40 +8:00):
第七题 标题写错了
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面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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