PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list の解消
こんにちは!kossyです!
さて、今回はPostgreSQLで遭遇する、PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list の解消方法について、
ブログに残してみたいと思います。
環境
PostgreSQL 12系
実装
以下のようなクエリがあると、must appear in select list のエラーが発生します。
scope :error_distinct, -> () { query = <<-SQL.squish SELECT DISTINCT to_char(emp.created_at, 'YYYY-MM-DD') FROM employees AS emp LEFT JOIN orders ON orders.employee_id = emp.id ORDER BY created_at SQL find_by_sql(query) }
to_charで指定した列はそのままORDER BY で使えないんですね、、、
この場合はto_charで算出した列に AS 句で別名を付ければOKです。
scope :success_distinct, -> () { query = <<-SQL.squish SELECT DISTINCT to_char(emp.created_at, 'YYYY-MM-DD') AS chared_created_at FROM employees AS emp LEFT JOIN orders ON orders.employee_id = emp.id ORDER BY chared_created_at SQL find_by_sql(query) }
これで問題なく処理できます。