深入理解窗口函数

思路分析:要求每个用户截止到某天,累计总共通过了多少题,并且查询结果先按照日期升序排序,再按照姓名升序排序,有登录却没有刷题的那一天的数据不需要输出。有登录但是没刷题的不需要输出所以我们只用看passing_number表和user表。

求截止到某天累计通过题,想到用sum()+窗口函数,order by date(根据日期进行累计),那么partition by 后面应该跟什么字段呢?这里是按每个用户来看,所以按照用户分窗,然后按题目要求排序,完整代码如下:

SELECT u.name u_n,p.date,sum(number)over(partition by u.name ORDER BY date) ps_num
FROM passing_number p
LEFT JOIN user u 
ON p.user_id=u.id
ORDER BY date,u.name;