MySQL - 如何计算空值而不是空值?

Vol*_*ike 15 mysql sql group-by isnull notnull

我有一个简单的安装表:

  • prod_code
  • 电子邮件
  • install_slot

如果install_slot为NULL,则它是可用的安装槽.不为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` = 'example@example.com'
GROUP BY
    i1.`prod_code`,i2.`prod_code`
Run Code Online (Sandbox Code Playgroud)

dgw*_*dgw 36

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
Run Code Online (Sandbox Code Playgroud)

COUNTNOT NULL仅计算值.


小智 6

提供的解决方案对我不起作用.我不得不修改如下:

SELECT prod_code,
       COUNT(NULLIF(email,'')) AS total_installs,
       COUNT(NULLIF(install_slot,'')) AS used_installs
FROM installs
WHERE email='example@example.com'
GROUP BY prod_code
Run Code Online (Sandbox Code Playgroud)

  • 可能是因为电子邮件不是空值,而是实际上是空字符串。通过执行`nullif`,您可以将空字符串转换为null。因此,`count()`不计算在内 (2认同)