Определение продуктов, которыми владеет клиент - PullRequest
1 голос
/ 06 мая 2020

Я хочу проверить, есть ли у моего клиента iPhone, iPad или Macbook. Я не ищу, сколько iPhone или iPad или Macbook у одного покупателя, я просто хочу определить, владеют ли они одним из них, или они владеют двумя, или они владеют всеми тремя.

Я думаю об использовании функции CASE WHEN, и вот запрос:

select customer
, case when AppleProduct = 'iPhone' THEN 'TRUE' ELSE 'FALSE END AS Owns_iPhone
, case when AppleProduct = 'iPad' THEN 'TRUE' ELSE 'FALSE AS Owns_iPad
, case when AppleProduct = 'Macbook' THEN 'TRUE' ELSE 'FALSE' AS Owns_Macbook
from Apple_Product_Ownership

Это результат, который я пытаюсь получить

customer | Owns_iPhone | Owns_iPad | Owns_Macbook
X          TRUE          TRUE         FALSE
Y          FALSE         TRUE         TRUE
Z          TRUE          FALSE        FALSE

Но вместо этого я получаю

customer | Owns_iPhone | Owns_iPad | Owns_Macbook
X          TRUE          FALSE       FALSE
X          FALSE         TRUE        FALSE
Y          FALSE         TRUE        FALSE
Y          FALSE         FALSE       TRUE
Z          TRUE          FALSE       FALSE

1 Ответ

0 голосов
/ 06 мая 2020

Вы ищете условное агрегирование. Я бы сформулировал ваш запрос так:

select 
    customer,
    logical_or(AppleProduct = 'iPhone') Owns_iPhone,
    logical_or(AppleProduct = 'iPad') Owns_iPad,
    logical_or(AppleProduct = 'Macbook') Owns_Macbook,
from Apple_Product_Ownership
group by customer
...