installsの簡単なテーブルがあります:
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`
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
値のみ。
提供された解決策は私にはうまくいきませんでした。私は次のように変更する必要がありました:
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