Выделить все столбцы с GROUP BY одним столбцом
У меня есть эта таблица:
+----+-----+----------+
| id | name| key |
+----+-----+----------+
| 1 | foo |111000 |
| 2 | bar |111000 |
| 3 | foo |000111 |
+----+-----+----------+
Есть ли способ сгруппировать по ключу, чтобы получить этот результат?
+----+-----+----------+
| id | name| key |
+----+-----+----------+
| 2 | bar |111000 |
| 3 | foo |000111 |
+----+-----+----------+
Или этот результат:
+----+-----+----------+
| id | name| key |
+----+-----+----------+
| 1 | foo |111000 |
| 3 | foo |000111 |
+----+-----+----------+
Если я использую этот запрос:
SELECT * FROM sch.mytable GROUP BY(key);
Это не правильно, я знаю это, потому что я должен сгруппировать по всем столбцам, которые мне нужно показать.
Есть ли решение этой проблемы?
2 ответа
Решение
select distinct on (key) *
from t
order by key, name
Обратите внимание, что order by
Предложение определяет, какой ряд выиграет связи.
Запрос, который работает для всех механизмов БД:
select t1.*
from sch.mytable t1
join
(
SELECT min(id) as id
FROM sch.mytable
GROUP BY key
) t2 on t1.id = t2.id
где min(id)
это функция, которая влияет на то, какой результат вы получите. Если вы используете max(id)
Вы получаете другой.