Rails Arel 如何分组 select
Rails Arel how group by select
我想先用 select 添加属性,然后按它们排序。
label = Arel.sql(
%q(
case label
when 'x' then 1
when 'y' then 2
end
)
)
Item.all.select("*, 'x' as label").order(label)
错误:
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column "label" does not exist)
LINE 2: case label
很难想象最终结果应该是什么。您说 GROUP BY,但我看不到您要分组的内容。我猜你实际上不需要这样做。如果您想这样做,您也可以按多列排序。
如果你必须使用Arel
Item.select(
Arel.star,
Arel::Nodes::Case.new(Item.arel_table[:column_name])
.when('x').then(1)
.when('y').then(2)
.as('label'))
.order('label')
否则只用普通字符串,不需要用Arel
包起来
Item.select("*")
.select("CASE items.column_name WHEN 'x' THEN 1 WHEN 'y' THEN 2 END AS label")
.order('label')
执行SELECT中的逻辑,然后按结果排序。
我想先用 select 添加属性,然后按它们排序。
label = Arel.sql(
%q(
case label
when 'x' then 1
when 'y' then 2
end
)
)
Item.all.select("*, 'x' as label").order(label)
错误:
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column "label" does not exist)
LINE 2: case label
很难想象最终结果应该是什么。您说 GROUP BY,但我看不到您要分组的内容。我猜你实际上不需要这样做。如果您想这样做,您也可以按多列排序。
如果你必须使用Arel
Item.select(
Arel.star,
Arel::Nodes::Case.new(Item.arel_table[:column_name])
.when('x').then(1)
.when('y').then(2)
.as('label'))
.order('label')
否则只用普通字符串,不需要用Arel
Item.select("*")
.select("CASE items.column_name WHEN 'x' THEN 1 WHEN 'y' THEN 2 END AS label")
.order('label')
执行SELECT中的逻辑,然后按结果排序。