SQL/HQL中开窗函数详细讲解

一、前言

本文将从一道面试题入手,以一种易人理解的方式,将对SQL窗口函数部分进行详细讲解。

开窗函数,顾名思义,就是从现有的表上,额外多加一列出来展示,这也是从视觉上来讲最直观的体验。

 

二、思维拓展

注:MYSQL中无开窗函数

开窗函数分为两大类:

1、分组聚合开窗函数

  例. sum() over(partition by ... )                              分组聚合,无order by

2、分组排序开窗函数(具体不同将在另一篇博文中详细说明)

  例.rank()  over (partition by ... order by ...)      计算排序 (1 2 3 3 5)

       dense_rank() over (partition by ... order by ...)  密集排序 (1 2 3 3 4)

       row_number() over (partition by ... order by ...)  行序排序 (1 2 3 4 5)

 

三、面试题

从以下格式的表中,筛选出每日每个URL访问的第三个用户

元数据格式:URL                   USER                     TIME(时间戳)

 

四、实现 

1、time时间戳转换成时间

2、截取转换后的time的yyyy-mm-dd(substr或left实现)

3、获取当前日期,转换成时间,截取yyyy-mm-dd

4、第一个查询查询当天的所有url、user、time通过where 转换后的时间戳日期 = 当前的时间戳日期

5、使用分组排序开窗函数,获得url、用户。where 排名为3条件

代码部分(由于同一天中可能会有用户在同一时间同时进行访问):

select url,user
(select
user,url, dense_rank() over(partition by url order by time asc) as rank 
from
(select 
url,user,time
FROM
a
where substr(from_unixtime(time),0,10)=substr(from_unixtime(unix_timestamp()),0,10))Current_data )       //   ---每天时间
where rank = 3

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值