1. 题目
-
题目描述
# 写出一个sql语句查询刷题信息,包括: 用户的名字,以及截止到某天,累计总共通过了多少题, # 并且查询结果先按照日期升序排序,再按照姓名升序排序, # 有登录却没有刷题的哪一天的数据不需要输出
-
三张表
-
所需结果
2. 题解
思路:
首先,第一张表纯属多余;
结果中的三个字段中,第一个字段u_n
来自第二张表,第二个字段date
来自第一张表,第三个字段ps_num
是累计 number
;
所以这题考察表连接和窗口函数的累计求和。
可以看出结果中并未对用户名u_n
去重,使用表passing_number
去 LEFT JOIN
表user
即可(由于两个表对应字段的取值没有差异,所以这里用INNER JOIN 也没问题)
题解如下:
SELECT u.name u_n,
p.date,
SUM(p.number) OVER(PARTITION BY p.user_id ORDER BY p.date)ps_num
FROM passing_number p
LEFT JOIN user u
ON p.user_id = u.id
ORDER BY p.date ASC, u.name ASC