Rails - “union all”之后的“order by”
Posted
技术标签:
【中文标题】Rails - “union all”之后的“order by”【英文标题】:Rails - "order by" after "union all" 【发布时间】:2012-06-19 14:29:11 【问题描述】:如何使用 Rails 语法制作这个(PostgreSQL)?:
SELECT fld1, fld2
FROM
(
SELECT fld1, fld2, count(*) as cnt FROM data WHERE fld2 not in('exclude1', 'exclude2') GROUP BY fld1, fld2 ORDER BY COUNT(*) DESC LIMIT 100
UNION ALL
SELECT fld1, fld2, count(*) as cnt FROM data WHERE fld2 in('exclude1', 'exclude2') GROUP BY fld1, fld2
) x
ORDER BY x.cnt DESC
我做了以下:
my_data = (Data.all(
:select => sel_clause,
:conditions => "data.fld2 not in %s" % [in_clause],
:group => grp_clause,
:order => 'count(*) desc',
:limit => @max_rows) <<
Data.all(
:select => sel_clause,
:conditions => "data.fld2 in %s" % [in_clause],
:group => grp_clause).order('cnt desc')
问题是这个
【问题讨论】:
【参考方案1】:这是我倾向于使用 find_by_sql 的地方。结果将作为一个数组返回,其中请求的列封装为您从中调用此方法的模型的属性。
http://ar.rubyonrails.org/classes/ActiveRecord/Base.html
~查尔斯~
【讨论】:
以上是关于Rails - “union all”之后的“order by”的主要内容,如果未能解决你的问题,请参考以下文章
( 转 ) mysql 实战 orin与union all 的查询效率
SQL开发实战技巧系列:从执行计划讨论UNION ALL与空字符串&UNION与OR的使用注意事项