窗口函数和group by

牛客的课程订单分析(五)

http://www.nowcoder.com/questionTerminal/348afda488554ceb922efd2f3effc427

窗口函数和group by的区别

group by分组之后,统计默认只会计算一行记录
窗口函数 分组之后,有多少列显示多少行记录

思路

1.首先过滤筛选不符合的记录,然后根据用户分组,计算出每组用户的排名和统计总数
select
    user_id,
    date,
    dense_rank() over (partition by user_id order by date) as rank_no,
    count(*) over (partition by user_id) as cnt 
from
    order_info
where
    product_name in ('Java','C++','Python')
and
    status = 'completed'
and
    date > '2025-10-15'

2.只取每组排名前2的
select
    user_id,
    min(t.date),
    max(t.date),
    t.cnt
from 
(
select
    user_id,
    date,
    dense_rank() over (partition by user_id order by date) as rank_no,
    count(*) over (partition by user_id) as cnt 
from
    order_info
where
    product_name in ('Java','C++','Python')
and
    status = 'completed'
and
    date > '2025-10-15'
) t
where 
    t.rank_no < 3
and
    t.cnt >= 2
group by user_id
order by 
    user_id;
全部评论
为什么这里需要用到group by ,不用就只显示一行数据?
点赞 回复 分享
发布于 2021-04-26 16:15

相关推荐

09-22 15:45
门头沟学院 Java
谁给娃offer我给...:我也遇到了,我说只要我通过面试我就去,实际上我根本就不会去😁
点赞 评论 收藏
分享
评论
8
收藏
分享

创作者周榜

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