соблюдая порядок, делая различные

63
7

В Postgres, учитывая следующие данные:

-[ RECORD 1 ]-
id | 57425
filter | 1
-[ RECORD 2 ]-
id | 57416
filter | 1
-[ RECORD 3 ]-
id | 57426
filter | 1
-[ RECORD 4 ]-
id | 57416
filter | 2
-[ RECORD 5 ]-
id | 57424
filter | 2
-[ RECORD 6 ]-
id | 57425
filter | 2
-[ RECORD 7 ]-
id | 57427
filter | 2

Что SQL для создания следующего (удаление дублируется). Меня не волнует, если это тот же самый порядок, я просто хочу, чтобы записи с значением фильтра "1" отображались перед записями с значением фильтра "2".

-[ RECORD 1 ]-
id | 57425
filter | 1
-[ RECORD 2 ]-
id | 57416
filter | 1
-[ RECORD 3 ]-
id | 57426
filter | 1
-[ RECORD 4 ]-
id | 57424
filter | 2
-[ RECORD 5 ]-
id | 57427
filter | 2

спросил(а) 2021-01-25T15:10:19+03:00 5 месяцев назад
1
Решение
77

Как я уже сказал в комментарии, это кажется простой проблемой группировки/упорядочения:

SELECT id,MIN(filter) as lowFilter
FROM UnnamedTable
GROUP BY id
ORDER BY lowFilter

Как только вы обнаружите, что говорите: "Я хочу отличить некоторые из столбцов..." или "Я хочу делать разные, но также включать дополнительные столбцы", вы должны понимать, что то, что вы на самом деле ищете, не DISTINCT но GROUP BY. Затем вам нужно правильно сформулировать, какие агрегаты вы хотите применить к дополнительным столбцам, учитывая, что для выбора может быть несколько значений (из нескольких строк).

ответил(а) 2021-01-25T15:10:19+03:00 5 месяцев назад
45

Select ID, min(filter) from my_table group by id order by 2

Или


Select distinct t1.id, (select min(filter) from my_table t2 where t2.id = t1.ID) from my_table t1 order by 2

ответил(а) 2021-01-25T15:10:19+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема