【发布时间】:2021-11-28 17:31:00
【问题描述】:
我需要选择一行中由某个字段分组并包含另一个字段(点)的最小值的所有字段,使用另一个字段来打破平局(id)。
数据示例:
| id | game | points | hash |
|---|---|---|---|
| 1 | x | 5 | ax8 |
| 1 | z | 4 | bc4 |
| 2 | y | 2 | df8 |
| 2 | x | 1 | fd8 |
| 3 | x | 2 | fda0 |
| 3 | y | 2 | fzlf |
| 3 | z | 2 | z89w |
期望的结果:
| id | game | point | hash |
|---|---|---|---|
| 2 | x | 1 | fd8 |
| 2 | y | 2 | df8 |
| 3 | z | 2 | z89w |
所以我想返回每场比赛的最低得分行和得分的 id。请注意,如果出现平局,例如在游戏 y 中 id 3 和 2 都得 2 分,我想要 id 为 2 的行。在实际表格中,有更多包含相关数据的字段。
当前解决方案:
SELECT g1.*
FROM games g1
INNER JOIN
(
SELECT game, MIN(Point) MinPoint
FROM games g2
GROUP BY game
) g2
ON g1.game = g2.game AND g1.point = g2.MinPoint
但是,我得到重复的行,其中两个 id 在游戏中得分相同。
【问题讨论】:
-
您需要在另一个级别重复此结构,以选择按游戏和积分分组的具有最小 ID 的行。