MySQL - 我如何计算空值而不是空值?
Posted
技术标签:
【中文标题】MySQL - 我如何计算空值而不是空值?【英文标题】:MySQL - How Do I Count Nulls and Not Nulls? 【发布时间】:2012-03-03 22:35:02 【问题描述】:我有一个简单的安装量表:
prod_code 电子邮件 安装槽如果 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` = 'example@example.com'
GROUP BY
i1.`prod_code`,i2.`prod_code`
【问题讨论】:
我不懂你,Lightness。以“我猜”开头的带问号的句子的哪一部分你不明白? 没有。我不是在说那句话,是吗? 嗯?我还是不关注你。 我仍然没有发现你的 cmets 很有建设性。我的反对意见也被赞成,在你抱怨我的问题风格不清楚的 1 分钟内,我实际发布问题的 2 分钟内,有人轻松抓住了问题并解决了问题。我的意思是,至少我展示了我尝试过的东西,而且我的测试用例并没有涉及很多脑力来理解。我的意思是,拜托,你是一个 C++ 程序员——你见过更难的问题。 我没有说这个问题很难;甚至没有一次。我试图训练您摆脱说“它不起作用”而不是描述程序行为并将其与您想要的行为进行比较的不良习惯。一个编程问题应该永远包含“它不起作用”的字眼。但我已经放弃了。 【参考方案1】: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
COUNT
仅计算 NOT NULL
值。
【讨论】:
哇。我很惊讶这实际上奏效了。在我看来,这似乎行不通,但确实可行。 @Lightness Races in Orbit:说“它有效”也是一个坏习惯吗?【参考方案2】:提供的解决方案对我不起作用。我不得不修改如下:
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
【讨论】:
可能是因为电子邮件不是空的,而是空字符串。通过执行nullif
,您将空字符串转换为空值。因此count()
不算数以上是关于MySQL - 我如何计算空值而不是空值?的主要内容,如果未能解决你的问题,请参考以下文章
用 phpunit 模拟 symfony 安全,返回空值而不是布尔值(不使用预言)