DAY1-SQL题目和窗口函数

一、题目:查找连续五天登录的用户

表:user_logins

字段:user_id/login_date

SELECT user_id

FROM (

SELECT

user_id,

login_date,

lead (login_date, 4) OVER (PARTITION BY user_id ORDER BY login_date) AS end_date

FROM user_logins

) AS date_range

WHERE datediff (end_date, login_date) = 4;

这个查询使用了窗口函数lead(),它用于获取当前行后的登录日期。在这里,我们使用LEAD(login_date, 4)来获取每个用户的登录日期后的第五天。

然后,我们使用DATEDIFF()函数来计算两个日期之间的天数差异。如果差异为4,说明存在连续的五天登录。

😎:新学两个函数

lead(字段,n)——用来获取当前行后面n个的内容

datediff(字段,字段)——计算两个日期之间的差值

二、窗口函数

1.ROW_NUMBER( ): 给结果集中的每一行分配一个唯一的数字,通常用于排序。

ROW_NUMBER() OVER (ORDER BY column_name);

2.RANK( ): 为结果集中的每一行分配一个排名,相同值将得到相同的排名,但可能跳过其他排名。

RANK() OVER (ORDER BY column_name);

3.DENSE_RANK( ): 为结果集中的每一行分配一个排名,相同值将得到相同的排名,不会跳过其他排名。

DENSE_RANK() OVER (ORDER BY column_name);

4.SUM( ) OVER( ) 计算窗口中某列的累积和。

SUM(column_name) OVER (PARTITION BY partition_column ORDER BY order_column);

5.AVG( ) OVER( ) 计算窗口中某列的平均值。

AVG(column_name) OVER (PARTITION BY partition_column ORDER BY order_column);

6.LEAD( ) 获取窗口中当前行后的值。

LEAD(column_name, offset, default_value) OVER (ORDER BY order_column);

7.LAG( ) 获取窗口中当前行前的值。

LAG(column_name, offset, default_value) OVER (ORDER BY order_column);

全部评论

相关推荐

06-13 17:00
武汉大学 Java
6月了还有点击就送的offer吗😭,投麻了😢
叫我阿东就行:这个bg,也还没找到理想的工作吗?好难,好焦虑
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务