Vanilla SQL, который выбирает несколько значений в одном столбце

Если у меня есть таблица с идентификаторами клиентов в одном столбце и часовыми поясами в другом, есть ли простой оператор SQL, который может выбрать все идентификаторы клиентов с разными значениями часовых поясов? Другими словами, я хочу найти тех клиентов с офисами в Нью-Йорке, Чикаго и Сан-Франциско, но не тех, у кого ТОЛЬКО есть офис в одном или другом часовом поясе.

3 ответа

Решение
SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1

Использование DISTINCT важно.

COUNT (TimeZone) считает все ненулевые значения, а не только отдельные значения. Так что это эквивалентно COUNT(*), кроме случаев, когда TimeZone равен нулю.

Другими словами, если у данного клиента есть три офиса, но все они находятся в восточном часовом поясе, COUNT (TimeZone) будет равен 3, тогда как COUNT(DISTINCT TimeZone) будет равен 1.

SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1

Некрасиво, но эффективно

select CustomerID
where  CustomerID in 
(
select customerID from
     (select distinct CustomerID
     from   table
     where  TimeZone in ('NY','CHI','SF')) t
having count(*) = 3
)
Другие вопросы по тегам