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
)