V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
yaron
V2EX  ›  问与答

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

  •  
  •   yaron · 91 天前 · 590 次点击
    这是一个创建于 91 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目

    原始表格:

    自增 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  
       91 天前   ❤️ 2
    select * from table where id in (select max(id) from table group by name )
    Suddoo
        2
    Suddoo  
       91 天前 via iPhone
    表里有创建时间字段吧,开窗函数,对名字分组,按时间降序排,取组内第一个
    BreadKiller
        3
    BreadKiller  
       91 天前
    select max(id),name,score from table group by name
    akira
        4
    akira  
       91 天前
    一楼就是最简单的方案了
    v2eb
        5
    v2eb  
       91 天前 via Android
    select group_concat(score) from table group by name
    yaron
        6
    yaron  
    OP
       90 天前
    @cnoder 感谢!
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1216 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 20:05 · PVG 04:05 · LAX 13:05 · JFK 16:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.