2012-02-11 74 views
11

我有一個簡單的表安裝MySQL - 如何計算空值而不是空值?

  • prod_code
  • 電子郵件
  • install_slot

如果install_slot爲NULL,那麼它是一個可用的安裝插槽。非空 - 然後,使用槽。我需要返回給定產品和電子郵件的總安裝結果以及給定產品和電子郵件的使用安裝結果。我想我可以用兩個查詢來做到這一點,但想知道是否有一種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 2012-02-11 23:40:39

+0

都不是。我不是在談論那句話,是我。 – 2012-02-12 00:20:53

+0

咦?我仍然不跟隨你。 – Volomike 2012-02-12 03:17:27

回答

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 2012-02-11 23:49:29

+0

@Lightness軌道上的比賽:說'它有效'也是一個壞習慣嗎? – 2017-03-10 22:32:29

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