牛客网数据库SQL实战详细剖析(66-70)

SQL66 牛客每个人最近的登录日期(一)

select user_id, max(date) as idfrom logingroup by user_idorder by user_id

select distinct user_id, first_value(date) over(partition by user_id order by date desc) as id from login order by user_id

解题思路:first_value() 窗口函数返回相对于窗口中第一行的指定列的值。

select t.user_id,t.datefrom( select user_id, date, row_number() over(partition by user_id order by date desc) as id from login) twhere t.id = 1order by t.user_id

解题思路:row_number() 窗口函数返回每行的行号,取每个分区的行号为1的数据。

SQL67 牛客每个人最近的登录日期(二)

select u.name,c.name,t.datefrom( select user_id,max(date) as date from login group by user_id order by date ) tjoin user u on t.user_id = u.idjoin login l on t.user_id = l.user_id and t.date = l.datejoin client c on l.client_id = c.idorder by u.name

select u.name,c.name,t.datefrom( select user_id,client_id,date,row_number() over(partition by user_id order by date desc)as date2 from login) tjoin user u on t.user_id = u.idjoin client c on t.client_id = c.idwhere t.date2 = 1order by u.name

解题思路:row_number() 窗口函数返回每行的行号,取每个分区的行号为1的数据。

SQL68 牛客每个人最近的登录日期(三)

select round(count(b.date) * 1.0 / count(*), 3) p from ( select user_id, min(date) as date from login group by user_id)aleft join login b on a.user_id = b.user_id and b.date = date_add(a.date, INTERVAL 1 DAY)

select round(count(distinct b.user_id) * 1.0 / count(distinct a.user_id), 3) pf rom login a left join login b on a.user_id = b.user_id and b.date = date_add(a.date, INTERVAL 1 DAY)

SQL69 牛客每个人最近的登录日期(四)

select distinct l.date,ifnull(b.new,0)from login lleft join ( select distinct date,count(date) as new from ( select user_id, min(date) date from login group by user_id ) a group by date order by date)b on l.date = b.date

解题思路:ifnull()判断是否为null

select a.date,sum(case when `rank` = 1 then 1 else 0 end) newfrom(select date, row_number() over(partition by user_id order by date) `rank`from login) agroup by a.date;

解题思路:窗口函数获取登录的次数,最早就是首次登录,然后分组对rank=1的求和即可。case when then else end可以理解为java的if-else if -else。

SQL70 牛客每个人最近的登录日期(五)

select date,ifnull(round(sum(tomm) * 1.0 / sum(new),3),0) as p from ( select user_id, date, min(date) over(partition by user_id), case when datediff(lead(date,1) over(partition by user_id),min(date) over(partition by user_id)) = 1 then 1 else 0 end as tomm, case when date = (min(date) over(partition by user_id)) then 1 else 0 end as new from login) as a group by date

解题思路:datediff()函数计算两个日期之间的天数,ag()与lead函数是跟偏移量相关的两个分析函数,过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤,该操作可代替表的自联接,且效率更高

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容