【发布时间】:2021-07-06 18:46:54
【问题描述】:
假设有一个这样的表:
| group ID | member ID | value |
|---|---|---|
| 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 |
| ... | ... | ... |
该表有三列,一个group ID,唯一标识某个group,一个member ID,唯一标识单个groups内部的members(全局,member ID不是唯一的),和value,这是我们希望在每个组中最大化的东西。
任务是为每个group ID 找到一个member ID,它最大化value。这听起来很简单,对吧?
嗯,显然不是。我正在使用 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;
但是这些方法都没有产生正确的结果。 为了完整起见,上表查询的预期输出将是
| group ID | member ID | value |
|---|---|---|
| 0 | 2 | 5 |
| 1 | 2 | 1 |
| 2 | 21 | 7 |
| 3 | 1 | 2 |
| ... | ... | ... |
甚至
| group ID | member ID |
|---|---|
| 0 | 2 |
| 1 | 2 |
| 2 | 21 |
| 3 | 1 |
| ... | ... |
如果返回 value 会导致问题。我会感谢任何形式的帮助。
【问题讨论】:
-
您的子查询还应该返回
group_id,您也应该在 ON 子句中使用它。 -
@forpas 是的,多亏了你和 Rui Costa,我似乎已经找到了解决方案。
标签: mysql sql group-by mariadb argmax