我正在將一個站點從mysql遷移到PostgreSQL(目前爲止我非常喜歡),但我對某個查詢有疑問。請注意,這不是一個存儲函數 - 這是一個手動傳入的Python腳本中的字符串(我知道這是一個糟糕的做法,但僅適用於內部應用程序)。在MySQL中,查詢是結構化的,像這樣:MySQL IF /查詢轉換爲PostgreSQL
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中,你不能直IF的Postgres裏。該文檔似乎表明,最好的轉換是使用case/when語句。我嘗試過沒有成功。 SUM/IF語句是拋出我的 - 查詢的其餘部分應該沒問題。任何建議將不勝感激!
獎金的問題:你會怎麼做,如果包括的一個查詢:
SUM(IF(ISNULL(is_correct), 0, 1)) AS wrong
這看起來很有希望!僅僅爲了測試的目的,我運行了「SELECT SUM(case is_correct when 1 then 1 else 0 end)AS correct FROM k_p」,並得到了錯誤「ERROR:操作符不存在:boolean = integer」並帶有箭頭直到when。任何想法發生了什麼? –
@i_thought_i_was_smart剛剛更新了代碼,它現在應該可以工作 –
不錯!我想我想出了一個替代解決方案 - 「SELECT SUM(case(cast(is_correct as integer))1 then 1 else 0 end)FROM k_p」 - 似乎工作。哪種方式更「正確」? –