22

インストールの簡単な表があります:

  • 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` = 'example@example.com'
GROUP BY
    i1.`prod_code`,i2.`prod_code`
4

2 に答える 2

50
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

COUNTNOT NULL値のみをカウントします。

于 2012-02-11T23:44:32.630 に答える