web-dev-qa-db-ja.com

MySQL-ヌルではなくヌルをカウントするにはどうすればよいですか?

installsの簡単なテーブルがあります:

  • prod_code
  • eメール
  • install_slot

Install_slotがNULLの場合、それは使用可能なインストールスロットです。 nullではありません-次に、スロットを使用しました。特定の製品と電子メールの合計インストール数の結果、および特定の製品と電子メールの使用済みインストールの結果を返す必要があります。 2つのクエリでこれを実行できると思いますが、すべてを1つで実行する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` = '[email protected]'
GROUP BY
    i1.`prod_code`,i2.`prod_code`
16
Volomike
SELECT prod_code,
       COUNT(email) AS total_installs,
       COUNT(install_slot) AS used_installs
FROM installs
WHERE email='[email protected]'
GROUP BY prod_code

COUNTカウントNOT NULL値のみ。

38
dgw

提供された解決策は私にはうまくいきませんでした。私は次のように変更する必要がありました:

SELECT prod_code,
       COUNT(NULLIF(email,'')) AS total_installs,
       COUNT(NULLIF(install_slot,'')) AS used_installs
FROM installs
WHERE email='[email protected]'
GROUP BY prod_code
6
Gary Lesperance