返回学生的平均学分绩点, 可以不用 ROW_NUMBER 和 CASE 语句 吗? 目前的数据库 (话说这样的问题 放哪个节点最”合理“ 呢? 对提问者, 最友好呢?

2021-01-26 12:51:38 +08:00
 wxmomomowx

chengji

sid cid quarter year grade
A1 math101 Winter 2013 4
A1 Chinese102 Spring 2015 2
A1 Chinese103 Spring 2015 3
A2 math103 Spring 2017 4
A2 math100 Winter 2019 0
A3 Chinese100 Winter 2018 4
A3 math102A Fall 2020 4
A3 art101 Winter 2020 3
WITH t AS (
    SELECT sid, year, quarter, AVG(grade) AS gpa,
           ROW_NUMBER() OVER (PARTITION BY sid
                              ORDER BY year DESC, CASE quarter 
                                                               WHEN 'Fall' THEN 3
                                                               WHEN 'Spring' THEN 2
                                                               WHEN 'Winter' THEN 1 END DESC) rn
    FROM chengji
    GROUP BY sid, year, quarter
)

SELECT sid, year, quarter, gpa
FROM t
WHERE rn = 1;

目前, 这个 sql 语句返回, 是想要的结果了

sid year quarter gpa
A1 2015 Spring 2.5
A2 2019 Winter 0.0
A3 2020 Winter 3.0

有可 可以不用 ROW_NUMBER 和 CASE 语句 但是同样返回 一样的结果吗? sqlite 环境

278 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX