Можно ли указать условие в Count()
? Я хотел бы сосчитать только те строки, которые имеют, например, «Менеджер» в столбце «Позиция».
Я хочу сделать это в подсчете, не используя WHERE
; Я спрашиваю об этом, потому что мне нужно считать обоих Менеджеров и Других в одном SELECT
(что-то вроде Count(Position = Manager), Count(Position = Other))
этого WHERE
бесполезно для меня в этом примере.
sql
sql-server
tsql
Агнешка
источник
источник
SELECT *
, ноSELECT COUNT(*)
, это совершенно другой зверь.Ответы:
Если вы не можете просто ограничить сам запрос
where
предложением, вы можете использовать тот факт, чтоcount
агрегат учитывает только ненулевые значения:Вы также можете использовать
sum
агрегат аналогичным образом:источник
null
особенный. Использованиеcase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
forcase
, поэтомуcount()
пример может быть на 10 символов короче (если вы посчитаете пробел).Предполагая, что вы не хотите ограничивать строки, которые возвращаются, потому что вы также агрегируете другие значения, вы можете сделать это следующим образом:
Допустим, в том же столбце, где у вас были значения Manager, Supervisor и Team Lead, вы можете получить значения для каждого из них следующим образом:
источник
else
деталь, простоend
сразу после1
.else
in, так как он лучше документирует результаты оператора case, особенно для начинающих разработчиков SQL. Для краткости его можно удалить в этом случае.Ответ @Guffa отличный, просто отметьте, что, может быть, чище с заявлением IF
источник
Зависит от того, что вы имеете в виду, но другая интерпретация значения - это то, где вы хотите посчитать строки с определенным значением, но не хотите ограничивать
SELECT
ТОЛЬКО этими строками ...Вы бы сделали это
SUM()
с помощью предложения, например, вместо использованияCOUNT()
: напримеристочник
Вы также можете использовать ключевое слово Pivot, если вы используете SQL 2005 или выше
больше информации и от Technet
Тестовый набор данных
источник
Вы имеете в виду именно это:
Если так, то да, это работает!
источник
Я знаю, что это действительно старый, но мне нравится
NULLIF
хитрость для таких сценариев, и я не нашел никаких минусов до сих пор. Просто посмотрите мой пример копирования и вставки, который не очень практичен, но демонстрирует, как его использовать.NULLIF
может оказать небольшое негативное влияние на производительность, но я думаю, это все равно должно быть быстрее, чем подзапросы.Комментарии приветствуются :-)
источник
источник
Я думаю, что вы можете использовать простое предложение WHERE, чтобы выбрать только подсчет какой-либо записи.
источник
Вот что я сделал, чтобы получить набор данных, который включал в себя как общее количество, так и число, отвечающее критериям, в каждом транспортном контейнере. Это позволило мне ответить на вопрос: «Сколько судоходных контейнеров имеют более чем X% товаров по размеру 51»
источник
Обратите внимание, что в PrestoDB SQL (из Facebook) есть ярлык:
https://prestodb.io/docs/current/functions/aggregate.html
источник
Используя это, вы получите счет для менеджеров
источник