SQL groupby argmax

SQL groupby argmax

让table像这样:

组号 会员编号 价值
0 1 2
0 3 3
0 2 5
1 4 0
1 2 1
2 16 0
2 21 7
2 32 4
2 14 6
3 1 2
... ... ...

table有三列,一个group ID,唯一标识某个group,一个member ID,唯一标识members里面的个体groups(在全球范围内,member ID 不是唯一的),以及 value,这是我们希望在每个组内最大化的东西。

任务是为每个 group ID 找到最大化 valuemember ID。这听起来很简单,对吧?

嗯,显然不是。我正在使用 MariaDB 并尝试了 this page 上的所有内容,例如

select group_id, member_id, value from table x
    join (select max(t.value) as max_v from table t group by group_id) y on y.max_v = x.value;

但是 none 这些方法产生了正确的结果。 为了完整起见,上述 table 查询的预期输出将是

组号 会员编号 价值
0 2 5
1 2 1
2 21 7
3 1 2
... ... ...

甚至

组号 会员编号
0 2
1 2
2 21
3 1
... ...

如果返回 value 会导致问题。我很感激任何形式的帮助。

如果 `group_id, member_id, value' 组合是唯一的,这可以工作。

SELECT 
  x.group_id, 
  x.member_id,
  x.value
FROM 
  table x
join 
  (SELECT 
    group_id, 
    max(t.value) as max_v 
   FROM table t 
   GROUP BY group_id
  ) y 
ON y.max_v = x.value 
AND y.group_id = y.group_id