SELECT CustomerID
FROM table
WHERE product in ('a','b')
GROUP BY customerid
HAVING COUNT(distinct product) = 2
Обычно я не публикую ответы только по коду, но слов мало что может добавить к этому - запрос в основном объясняет себя
Вы также можете
HAVING max(product) <> min(product)
Возможно, стоит указать, что в запросах выполняется WHERE, с фильтрацией только по продуктам A и B. Затем выполняется GROUP BY, группируется клиент и подсчитывается различное количество продуктов (или получается минимальное и максимальное значения). , Затем выполняется HAVING, отфильтровывая только те, у которых есть 2 разных продукта (или получаются только те, в которых MIN, т.е. A, отличается от MAX, т.е. B)
Если вы никогда не сталкивались с HAVING, это логически эквивалентно:
SELECT CustomerID
FROM(
SELECT CustomerID, COUNT(distinct product) as count_distinct_product
FROM table
WHERE product in ('a','b')
GROUP BY customerid
)z
WHERE
z.count_distinct_product = 2
В предложении HAVING вы можете ссылаться только на столбцы, упомянутые в группе по. Вы также можете ссылаться на агрегатные операции (например, подсчет / мин / макс) в других столбцах, не упомянутых в группе, по