Выделить все столбцы с 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) Вы получаете другой.

Другие вопросы по тегам