Получить строку с наивысшим или самым низким значением из группы GROUP BY
Я пытаюсь получить строку с наивысшим/наименьшим числом после выполнения GROUP BY
:
Вот мои тестовые данные
mysql> SELECT * FROM test;
+----+-------+------+
| id | value | name |
+----+-------+------+
| 1 | 10 | row1 |
| 2 | 12 | row2 |
| 3 | 10 | row2 |
| 4 | 5 | row2 |
+----+-------+------+
4 rows in set (0.00 sec)
Чтобы получить самое низкое значение, я буду использовать MIN()
mysql> SELECT id, name, MIN(value) AS value FROM test GROUP BY name;
+----+------+-------+
| id | name | value |
+----+------+-------+
| 1 | row1 | 10 |
| 2 | row2 | 5 |
+----+------+-------+
2 rows in set (0.00 sec)
Теперь id row2
равен 2
, но он должен быть 4
.
Я также пробовал соединить:
mysql> SELECT t1.* FROM
(SELECT id, name, MIN(value) AS value
FROM test GROUP BY name) AS t1
INNER JOIN test AS t2 ON t1.id = t2.id;
+----+------+-------+
| id | name | value |
+----+------+-------+
| 1 | row1 | 10 |
| 2 | row2 | 5 |
+----+------+-------+
2 rows in set (0.00 sec)
Как я могу получить правильный идентификатор для каждого результата на основе того, что самый низкий value
?
Ответы
Ответ 1
Я думаю, это то, чего вы пытаетесь достичь:
SELECT t.* FROM test t
JOIN
( SELECT Name, MIN(Value) minVal
FROM test GROUP BY Name
) t2
ON t.Value = t2.minVal AND t.Name = t2.Name;
Вывод:
╔════╦═══════╦══════╗
║ ID ║ VALUE ║ NAME ║
╠════╬═══════╬══════╣
║ 1 ║ 10 ║ row1 ║
║ 4 ║ 5 ║ row2 ║
╚════╩═══════╩══════╝
Здесь я присоединяюсь к таблице с помощью minVal и Name.