Как создавать уникальные записи идентификаторов и фильтровать определенные значения столбцов для этих идентификаторов (Postgresql)

#sql #postgresql #select #subquery #distinct-values

#sql #postgresql #выберите #подзапрос #distinct-значения

Вопрос:

Ниже вы можете увидеть для каждого клиента несколько записей о продукте и время, когда он купил продукт. Однако меня интересует только то, покупали ли они когда-либо продукт 1, и если они никогда его не покупали, я бы заполнил ячейку продуктом x вместо пропуска идентификатора. Я использую Postgresql!

Это текущая таблица:

продукт

и это желаемый результат:

product2

Я пытаюсь использовать эту таблицу, но она не совсем то, что я ищу. Возможно ли вообще преобразовать первую таблицу во 2-ю?

 select distinct on ("id")
"id", "buying date", "product",
case when "product"='product 1' then 'product 1' else 'product x' as "Product2"
from product
order by 1,2
 

Ответ №1:

Если я правильно понимаю, логика, которую вы хотите, должна быть в order by предложении:

 select distinct on ("id")
       "id", "buying date", "product"
from product
order by id,
         ("product" = 'product 1') desc,  -- put product1 first
         "buying date";
 

Для логического выражения DESC true сначала упорядочивает значение, а затем false .

Комментарии:

1. почему вы выбираете desc? разве это не означает, что для любого идентификатора, который, например, упоминается 3 раза, («product» = ‘product 1’) будет отображаться 3-м?

2. @sweeti: DESC потому что сначала вы хотите получить ИСТИННЫЙ результат: («product» = ‘product 1’) desc