Как выбрать несколько столбцов, но показать только результаты, которые являются уникальными / не дублируются (на основе одного конкретного столбца)? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть немного интересной таблицы, где два ключа собираются вместе, чтобы создать первичный ключ для каждой строки. Но в одном крайнем случае я хочу ВЫБРАТЬ все строки (но только около 4 столбцов), но не иметь дубликатов конкретного столбца в результатах.

Так, например, если у меня есть таблица со столбцами «account_id, company_id, key, is_customer, favour_veg», будет много дубликатов «account_id», потому что они объединяются с «company_id» для формирования первичного ключа.

Но что, если я просто хочу получить список всех account_ids, но с сохранением других строк? В этом примере другие строки будут статичными между разными идентификаторами компании, поэтому нет потенциального риска, что информация не будет включена.

В моей голове это что-то вроде «ВЫБЕРИТЕ DISTINCT (account_id) COLUMNS (account_id, key, is_customer, favour_veg) ИЗ клиентов», но это, очевидно, не работает.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Делает ли это то, что вы хотите?

SELECT DISTINCT account_id, key, is_customer, favorite_veg
FROM customers;

DISTINCT применяется ко всей строке. Исходя из вашего описания, этого может быть достаточно.

Если нет, Postgres предлагает расширение DISTINCT ON, которое используется вместе с предложением ORDER BY:

SELECT DISTINCT ON (account_id) account_id, key, is_customer, favorite_veg
FROM customers
ORDER BY account_id;

При таком использовании он гарантирует набор результатов с одной строкой на account_id.

Вы можете добавить второй ключ после account_id в ORDER BY, если хотите указать самый ранний или самый поздний или самый большой или что-то еще для возвращаемой строки.

0 голосов
/ 02 ноября 2018

Может DISTINCT ON помогает? Это выдает все строки с первым появлением отличного account_id

демо: дБ <> скрипка

SELECT DISTINCT ON (account_id) 
    account_id, 
    key, 
    is_customer, 
    favorite_veg
FROM customers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...