サイトをmysqlからPostgreSQL(これまでのところ本当に気に入っています)に移行していますが、特定のクエリに関して質問があります。これはストアド関数ではないことに注意してください。これは、Pythonスクリプトで手動で渡された文字列でした(これはひどい方法ですが、内部アプリ専用です)。mysqlでは、クエリは次のように構成されていました。
SELECT
name,
SUM(IF(is_correct, 1, 0)) AS correct,
SUM(IF(is_correct, 0, 1)) AS wrong
FROM
k_p AS p JOIN
k_v AS v ON (variable_id=v.id)
WHERE
content_type_id=%s %s %s
GROUP BY
v.id
ORDER BY sort_order
is_correctは、0または1のブールデータを含む単なる列です。mysqlの場合のようにpostgresでストレートIFを実行することはできないことを理解しています。ドキュメントは、できれば変換はcase/whenステートメントを使用することであることを示唆しているようです。私は成功せずに実験しました。SUM / IFステートメントは、私を失望させているものです。残りのクエリは問題ないはずです。アドバイスをいただければ幸いです。
ボーナス質問:クエリの1つに次のものが含まれている場合、どのように処理しますか?
SUM(IF(ISNULL(is_correct), 0, 1)) AS wrong