MySQL - как считать нули, а не нули? - PullRequest
15 голосов
/ 12 февраля 2012

У меня есть простая таблица установок :

  • prod_code
  • Адрес электронной почты
  • install_slot

Если слот install_slot имеет значение NULL, это доступный слот для установки. Не ноль - значит, используется слот. Мне нужно вернуть результат общего количества установок для данного продукта и электронной почты, а также результат использованных установок для данного продукта и электронной почты. Я думаю, я мог бы сделать это с двумя запросами, но задавался вопросом, есть ли способ SQL сделать все это в одном?

Я попробовал следующее как дикое предположение, но оно не сработало .

SELECT
    i1.`prod_code`,
    COUNT(i1.`email`) AS total_installs,
    COUNT(ISNULL(i2.`install_slot`)) AS used_installs
FROM
    `installs` AS i1
JOIN
    `installs` AS i2
ON
    i1.`prod_code` = i2.`prod_code`
WHERE
    i1.`email` = 'example@example.com'
GROUP BY
    i1.`prod_code`,i2.`prod_code`

Ответы [ 2 ]

34 голосов
/ 12 февраля 2012
SELECT prod_code,
       COUNT(email) AS total_installs,
       COUNT(install_slot) AS used_installs
FROM installs
WHERE email='example@example.com'
GROUP BY prod_code

COUNT рассчитывает только NOT NULL значения.

5 голосов
/ 03 августа 2016

Предлагаемое решение не работает для меня. Мне пришлось изменить следующим образом:

SELECT prod_code,
       COUNT(NULLIF(email,'')) AS total_installs,
       COUNT(NULLIF(install_slot,'')) AS used_installs
FROM installs
WHERE email='example@example.com'
GROUP BY prod_code
...