さて、今回は
PostgreSQL
で遭遇する、PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list の解消方法について、
ブログに残してみたいと思います。
以下のようなクエリがあると、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
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
find_by_sql(query)
これで問題なく処理できます。