#sql #postgresql #select #subquery #distinct-values
#sql #postgresql #выберите #подзапрос #distinct-значения
Вопрос:
Ниже вы можете увидеть для каждого клиента несколько записей о продукте и время, когда он купил продукт. Однако меня интересует только то, покупали ли они когда-либо продукт 1, и если они никогда его не покупали, я бы заполнил ячейку продуктом x вместо пропуска идентификатора. Я использую Postgresql!
Это текущая таблица:
и это желаемый результат:
Я пытаюсь использовать эту таблицу, но она не совсем то, что я ищу. Возможно ли вообще преобразовать первую таблицу во 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