2012-02-11 68 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