在mysql中使用"GROUP BY"选择某些没有聚合函数的列的结果是什么

sav*_*ior 0 mysql sql

我有一个像table1一样的

|id | user_id | amount | group_id|
|1  | 1       | 5      | 1       |
|2  | 2       | 1      | 1       |
|3  | 3       | 3      | 1       |
|4  | 3       | 9      | 2       |
|5  | 1       | 4      | 2       |
Run Code Online (Sandbox Code Playgroud)

我只想select为每个group_id找到最后一个:

|id | user_id | amount | group_id|
|3  | 3       | 3      | 1       |
|5  | 1       | 4      | 2       |
Run Code Online (Sandbox Code Playgroud)

有我的SQL:

select max(id) , user_id , amount, group_id 
from table1
group by group_id
Run Code Online (Sandbox Code Playgroud)

我不知道它是否有效.按功能分组是否列出了每个组的最后一条记录的结果?

我是否必须使用table1 join table1来解决这个问题?

jue*_*n d 5

它不像那样工作.您可以id为每个组获得最高分,max(id)但其他非聚合列无法预测为您想要的那些.

您可以使用子查询选择最高ids并将该结果连接到表以获取其余列.

select t1.*
from table1 t1
join
(
  select max(id) as id
  from table1
  group by group_id
) t2 on t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)