2016-10-02 2 views
1

У меня есть эта таблица:Выбрать все столбцы с 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); 

Это не правильно, я знаю, потому что я должен группировать по всем столбцам, что мне нужно показывать.

Есть ли решение этой проблемы?

+0

Вам нужна функция агрегата для использования группы. Какова ваша совокупная функция? –

+0

Какая совокупная функция вам нужна? Среднее количество минут или мин или максимум или что-то еще –

ответ

5

distinct on

select distinct on (key) * 
from t 
order by key, name 

Обратите внимание, что положение order by определяет, какие строки будут выиграть связи.

+0

Спасибо, что эта работа для меня –

+0

Не кажется, что работает на оракуле! ON неприемлемо, кажется! – supernova

3

Запрос, который работает для всех двигателей DB будет

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), вы получите другой.

+0

Спасибо, что эта работа для меня тоже –

+0

Для других: В этом примере «id» - столбец «первичного ключа» таблицы. (Возможно, я ошибаюсь, но это то, что я предположил, и запрос работал нормально) – supernova

 Смежные вопросы

  • Нет связанных вопросов^_^