我重寫查詢我的思考方式你想要的:
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