V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wxmomomowx
V2EX  ›  程序员

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

  •  
  •   wxmomomowx · Jan 26, 2021 · 599 views
    This topic created in 1930 days ago, the information mentioned may be changed or developed.

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2958 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 07:26 · PVG 15:26 · LAX 00:26 · JFK 03:26
    ♥ Do have faith in what you're doing.