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

2022-06-29 18:03:18 +08:00
 yaron

题目

原始表格:

自增 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. 有没有更好的方法去解答这个题目
850 次点击
所在节点    问与答
6 条回复
cnoder
2022-06-29 18:44:48 +08:00
select * from table where id in (select max(id) from table group by name )
Suddoo
2022-06-29 19:04:36 +08:00
表里有创建时间字段吧,开窗函数,对名字分组,按时间降序排,取组内第一个
BreadKiller
2022-06-29 19:52:05 +08:00
select max(id),name,score from table group by name
akira
2022-06-29 21:39:23 +08:00
一楼就是最简单的方案了
v2eb
2022-06-30 00:11:13 +08:00
select group_concat(score) from table group by name
yaron
2022-06-30 09:21:43 +08:00
@cnoder 感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX