Vanilla SQL, который выбирает несколько значений в одном столбце - PullRequest
1 голос
/ 30 июня 2011

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

Ответы [ 3 ]

3 голосов
/ 30 июня 2011
SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1

Важно использовать DISTINCT.

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

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

1 голос
/ 30 июня 2011
SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1
0 голосов
/ 30 июня 2011

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

select CustomerID
where  CustomerID in 
(
select customerID from
     (select distinct CustomerID
     from   table
     where  TimeZone in ('NY','CHI','SF')) t
having count(*) = 3
)
...