Получение подсчета для разных предложений в одном запросе - PullRequest
1 голос
/ 05 января 2012

Есть ли более эффективные или более эффективные методы подсчета, чем то, что я делаю ниже?

select
   i.org_id,
   o.Org_Name_1,
   count(*) as 'Total Users',
   SUM(CASE WHEN i.email is NULL THEN 1 ELSE 0 END) as 'No Email'
from
   individu i,
   organiz o
where
   i.org_id = o.org_id
group by
   i.org_id, o.Org_Name_1
order by
   count(*) desc

1 Ответ

6 голосов
/ 05 января 2012
SUM(CASE WHEN i.email is NULL THEN 1 ELSE 0 END) as 'No Email'

можно заменить, потому что ... Цитируется из Число MSDN (Transact SQL)

COUNT (выражение ALL) вычисляет выражение для каждой строки в группе и возвращает количество ненулевых значений.

Когда выражение помещается в скобки инструкции COUNT, оно будет оценивать и считать только ненулевые значения в этом поле. Поэтому, если вы возьмете Count (*) - Count (поле), вы получите сумму всех пустых полей.

COUNT(*) - COUNT(i.email) AS 'No Email'

Ваш запрос будет выглядеть следующим образом:

SELECT
   i.org_id,
   o.Org_Name_1,
   COUNT(*) AS 'Total Users',
   COUNT(*) - COUNT(i.email) AS 'No Email'
FROM
   individu i,
   organiz o
WHERE
   i.org_id = o.org_id
GROUP BY
   i.org_id, o.Org_Name_1
ORDER BY
   COUNT(*) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...