V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yaron
V2EX  ›  问与答

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

  •  
  •   yaron · 2022-06-29 18:03:18 +08:00 · 766 次点击
    这是一个创建于 660 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目

    原始表格:

    自增 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 条回复    2022-06-30 09:21:43 +08:00
    cnoder
        1
    cnoder  
       2022-06-29 18:44:48 +08:00   ❤️ 2
    select * from table where id in (select max(id) from table group by name )
    Suddoo
        2
    Suddoo  
       2022-06-29 19:04:36 +08:00 via iPhone
    表里有创建时间字段吧,开窗函数,对名字分组,按时间降序排,取组内第一个
    BreadKiller
        3
    BreadKiller  
       2022-06-29 19:52:05 +08:00
    select max(id),name,score from table group by name
    akira
        4
    akira  
       2022-06-29 21:39:23 +08:00
    一楼就是最简单的方案了
    v2eb
        5
    v2eb  
       2022-06-30 00:11:13 +08:00 via Android
    select group_concat(score) from table group by name
    yaron
        6
    yaron  
    OP
       2022-06-30 09:21:43 +08:00
    @cnoder 感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2274 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:55 · PVG 08:55 · LAX 17:55 · JFK 20:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.