我正在尝试运行以下查询:
SELECT COALESCE(count(percent_cov), 0)
FROM sample_cov
WHERE target = 542
GROUP BY percent_cov
HAVING percent_cov < 10
基本上,我想显示这个统计数据的次数&lt;如果计数为0,则返回0而不是null。如果计数> 0,则得到我想要的数字作为结果,但是如果计数为0,我仍然得到返回的null。 (如果我将第二个参数设置为合并为正数,则相同)。我做错了什么?
答案 0 :(得分:3)
我按照想你想要的方式重写了你的查询:
SELECT count(*) AS ct
FROM sample_cov
WHERE target = 542
AND percent_cov < 10;
count()
返回0
当找不到匹配的行(或列中的非空值)时。无需coalesce()
。我引用the manual on this:
应该注意除了计数,这些函数返回一个 没有选择行时为空值。
强调我的。如果您想count()
使用0
返回时返回其他值,请使用CASE
语句。
此外,当您count(percent_cov)
时,WHERE percent_cov < 10
无效。只有非空值才有资格,count(*)
在这种情况下产生的结果会更快更简单。
您不需要GROUP BY
条款,因为您没有按任何方式进行分组,而是整合了整个表格。
您可以 GROUP BY target
,但这将是不同的查询:
SELECT target, count(*)
FROM sample_cov
GROUP BY target
WHERE percent_cov < 10;
您需要再次在HAVING
子句中拼出表达式。输出列名称仅在ORDER BY
和GROUP BY
中显示,而不是WHERE
或HAVING
。