V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
yaron
0.01D
V2EX  ›  问与答

请教大佬一个关于 SQL 的问题

  •  
  •   yaron · Jun 29, 2022 · 1249 views
    This topic created in 1399 days ago, the information mentioned may be changed or developed.

    题目

    原始表格:

    自增 ID (id) 名称 (name) 成绩 (score)
    1 小明 10
    2 小红 23
    3 小特 66
    4 小红 32
    5 小特 68
    6 小黄 66

    目标表格:

    自增 ID (id) 名称 (name) 成绩 (score)
    1 小明 10
    4 小红 32
    5 小特 68
    6 小黄 66

    需求:获取每个学生最新的一个成绩

    疑问

    已经尝试的方法:

    SELECT * FROM (SELECT * FROM tb_test
    ORDER BY id DESC) GROUP BY name
    

    疑问:

    1. GROUP BY这样用法是规范的吗?看教程一般都是跟 SUM 等公式一起用的
    2. GROUP BY在 SQLiteStudio 软件中获取的 id 是升序的,但在 QT 中使用又是降序的,是数据库引擎的问题?
    3. 有没有更好的方法去解答这个题目
    6 replies    2022-06-30 09:21:43 +08:00
    cnoder
        1
    cnoder  
       Jun 29, 2022   ❤️ 2
    select * from table where id in (select max(id) from table group by name )
    Suddoo
        2
    Suddoo  
       Jun 29, 2022 via iPhone
    表里有创建时间字段吧,开窗函数,对名字分组,按时间降序排,取组内第一个
    BreadKiller
        3
    BreadKiller  
       Jun 29, 2022
    select max(id),name,score from table group by name
    akira
        4
    akira  
       Jun 29, 2022
    一楼就是最简单的方案了
    v2eb
        5
    v2eb  
       Jun 30, 2022 via Android
    select group_concat(score) from table group by name
    yaron
        6
    yaron  
    OP
       Jun 30, 2022
    @cnoder 感谢!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   968 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 20:41 · PVG 04:41 · LAX 13:41 · JFK 16:41
    ♥ Do have faith in what you're doing.