我按照我认为您想要的方式重写了您的查询:
SELECT count(*) AS ct
FROM sample_cov
WHERE target = 542
AND percent_cov < 10;
count()
0
当没有找到匹配的行(或列中的非空值)时返回。不需要coalesce()
。我在此引用手册:
需要注意的是,除了 count 之外,这些函数在没有选择行时返回空值。
强调我的。如果您想在返回时返回不同的值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
and中可见,而GROUP BY
不是WHERE
or HAVING
。