V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wxmomomowx
V2EX  ›  程序员

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

  •  
  •   wxmomomowx · 2021-01-26 12:51:38 +08:00 · 269 次点击
    这是一个创建于 1192 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 环境

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   822 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:06 · PVG 06:06 · LAX 15:06 · JFK 18:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.