質問: タイトルの通りなのですが、SUMで集計して結果がNULLの場合に「無」のように文字で結果を表示するようにしたいものの、処理がうまくできません。 今は SELECT SUM(CASE WHEN A THEN 1 ELSE NULL END) としているため、ヒットしないところはNULLとなり空欄になっています。 ↑のNULLのところを文字で置換してみたり、COALESCEやISNULLを使ってもみたのですが、どうにもうまくできませんでした。 どなたかご教授頂けると幸いです。 よろしくお願いします。
回答: bool型の列に対して、trueとなっている行をカウントしたい、という話でしょうか。 SUMの結果をCOALESCEに通せばいいとは思いますが、COALESCEに渡す値の型を揃えないといけません。というか揃えられてしまいます。例えば次のSQLではSUMの結果は int なので、`'無'` も int に変換しようとします...が、できないのでエラーになります。 ``` SELECT COALESCE(SUM(CASE WHEN A THEN 1 ELSE NULL END), '無') -- ERROR: invalid input syntax for integer: "無" ``` ですから、SUMの方を明示的に文字列に変換しなければなりません。SQLで型変換を行う際には `CAST( value AS type )` とします。 ``` SELECT COALESCE(CAST(SUM(CASE WHEN A THEN 1 ELSE NULL END) AS text), '無') ``` PostgreSQLの場合、こういう書き方もできます。 ``` SELECT COALESCE(SUM(CASE WHEN A THEN 1 ELSE NULL END)::text, '無') ```