2012-02-11 5 views
11

私はの単純なテーブルがインストールする必要があり:MySQL - NullではなくNullをどのようにカウントするのですか?

  • prod_code install_slotがNULLの場合、それが利用可能なスロットをインストールします

install_slot

  • メール。ヌルではない - スロットを使用する。特定の製品と電子メールの合計インストールの結果と、特定の製品と電子メールの使用済みインストールの結果を返す必要があります。私は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` 
    
  • +1

    私はあなたを理解していない、明るさ。 "私が推測する"で始まる、それに疑問符が付いた文章のどの部分を理解できませんか? – Volomike

    +0

    それだけではありません。私はその文について話しているわけではありません。 –

    +0

    ハァッ?私はまだあなたに従っていない。 – Volomike

    答えて

    24
    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値のみ。

    +0

    うわー。私は実際に働いて驚いています。私の心の中ではうまくいかないようですが、それはそうです。 – Volomike

    +0

    軌道上の@ Lightness Races:「それは働いた」と言ったことも悪い習慣ですか? –

    3

    提供されている解決策は私の役に立たなかった。

    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 
    
    関連する問題