0

次のクエリを実行しようとしています。

SELECT COALESCE(count(percent_cov), 0)
FROM sample_cov
WHERE target = 542
GROUP BY percent_cov
HAVING percent_cov < 10

基本的に、この統計が 10 未満だった回数を表示し、カウントが 0 の場合は null ではなく 0 を返します。カウントが 0 より大きい場合は、結果として必要な数値を取得しますが、カウントが 0 の場合それでも null が返されます。(2 番目の引数を正の数として合体するように設定した場合も同じです)。私は何を間違っていますか?

4

1 に答える 1

3

私はあなたが望むようにあなたのクエリを書き直しました:

SELECT count(*) AS ct
FROM   sample_cov
WHERE  target = 542
AND    percent_cov < 10;

count()0一致する行 (または列に null 以外の値) が見つからない場合に返されます。の必要はありませんcoalesce()これに関するマニュアルを引用します:

count を除いて、行が選択されていない場合、これらの関数は null 値を返すことに注意してください。

鉱山を強調します。count()で戻ってきたときに別の値を返したい場合は、ステートメント0を使用します。CASE

また、count(percent_cov)持っているうちに書いても無駄ですWHERE percent_cov < 10。この場合、null 以外の値のみが適格でcount(*)あり、同じ結果がわずかに速く簡単に得られます。

何もグループ化しないため、句は必要ありませGROUP BYん。テーブル全体を集計しています。でき
ますが、これは別のクエリになります。 GROUP BY target

SELECT target, count(*)
FROM   sample_cov
GROUP  BY target
WHERE  percent_cov < 10;

HAVING句の式をもう一度綴る必要があります。出力列名は と でのみ表示されORDER BY、またはでは表示されGROUP BYません。WHEREHAVING

于 2012-07-11T17:26:28.053 に答える