MySQL - jak liczyć zera i inne niż zera?


Mam prosty stół

instalacje

:
  • prod_code
  • email
  • install_slot

Jeśli install_slot ma wartość NULL, jest to dostępne gniazdo instalacyjne. Not Null oznacza używany slot. Muszę zwrócić wynik ustawień ogólnych dla tego produktu i wiadomości e-mail, a także wynik ustawień zastosowanych dla tego produktu i wiadomości e-mail. Myślę, że mógłbym to zrobić za pomocą dwóch zapytań, ale zastanawiałem się, czy istnieje sposób SQL, aby zrobić to wszystko w jednym?
Próbowałem zgadnąć, ale tak

nie działał

.
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`

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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
zlicza tylko wartości
NOT NULL
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Sugerowane rozwiązanie nie zadziałało u mnie. Musiałem to zmienić w ten sposób:
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

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się