Как сгруппировать, имея одинаковый идентификатор? - PullRequest
1 голос
/ 11 июня 2010

Я хочу, чтобы customerid, который купил продукт X и Y и Z, из следующей схемы:

Продажи (customerid, productName, rid );

Я могсделать пересечение:

select customerid from sales where productName='X' 
INTERSECT 
select customerid from sales where productName='X' 
INTERSTECT
select customerid from sales where productName='Z'

Это лучшее, что я мог сделать?

Ответы [ 2 ]

6 голосов
/ 11 июня 2010

Не уверен, что это работает в postrgesql, но попробуйте:

select customerid 
from sales 
where productName in ('X', 'Y', 'Z')
group by customerid
having count(distinct productName) = 3
2 голосов
/ 11 июня 2010

Вы также можете выбрать из продаж 3 раза:

select s1.customerID
from sales s1, sales s2, sales s3
where s1.productName = 'X'
    and S2.productName = 'Y'
    and S3.productName = 'Z'
    and (S1.customerID = S2.customerID
         and s2.customerID = s3.customerID);

Или переписать, используя правильный синтаксис соединения (хотя может и не быть 100% ...)

select s1.customerID
from sales s1
inner join sales S2
    on s1.customerId = S2.customerID
inner join sales S3
    on s2.customerID = S3.customerId
where s1.productName = 'X'
    and S2.productName = 'Y'
    and S3.productName = 'Z';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...