Open4
SQLiteのシングルクォート・ダブルクォートの違い

ORDER BYが動作しないSQL
SELECT
h.PF_CODE AS '都道府県コード',
p.PF_NAME AS '都道府県名',
ROUND(CAST(h.INP_YES AS FLOAT) / (h.INP_YES + h.INP_NO + h.UNIDENTIFIED) * 100, 1) AS '入院率'
FROM HOSPITALIZATION AS h
JOIN PREFECTURE AS p ON h.PF_CODE = p.PF_CODE
ORDER BY '入院率' DESC, '都道府県コード' ASC;
ORDER BYが動作したSQL
SELECT
h.PF_CODE AS '都道府県コード',
p.PF_NAME AS '都道府県名',
ROUND(CAST(h.INP_YES AS FLOAT) / (h.INP_YES + h.INP_NO + h.UNIDENTIFIED) * 100, 1) AS '入院率'
FROM HOSPITALIZATION AS h
JOIN PREFECTURE AS p ON h.PF_CODE = p.PF_CODE
ORDER BY "入院率" DESC, "都道府県コード" ASC;

下記問題に取り組んでいるときに発生

この挙動は、シングルクォートとダブルクォートの扱いがデータベースエンジンによって異なるために発生する。
SQLiteでは、シングルクォートは文字列リテラル、ダブルクォートは識別子を表すよう。
そのため、ORDER BY '入院率'と書くと文字列リテラルとして扱われ、正しく並び替えが行われない。
一方、ORDER BY "入院率"と書くとエイリアス名として認識され、正しく並び替えが行われる。
この挙動から、使用しているデータベースエンジンはSQLiteであると予測できる。

GPTに聞いてみたら、下記のような回答だった。間違いなさそう。