我重写查询我的思考方式你想要的:
SELECT count(*) AS ct
FROM sample_cov
WHERE target = 542
AND percent_cov < 10;
count()
返回0
如果没有匹配的行(或非空值的列)中找到。不需要coalesce()
。我引用the manual on this:
应当指出的是,除了计数,当选择没有行这些函数返回一个 空值。
强调我的。如果要在count()
返回0
时返回不同的值,请使用CASE
语句。
另外,在WHERE percent_cov < 10
中写入count(percent_cov)
是没有用的。在这种情况下,只有非空值符合条件,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
中可见。
这是行不通的,谢谢!我想我会让事情比他们需要的更努力。 – user1453804 2012-07-11 18:12:12
@ user1453804:是的,我想。 :)但是,一旦你知道如何,编程中的大多数事情似乎很容易。 – 2012-07-11 18:14:44