1

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')

問題は、この << が従来の「UNION ALL」ではなく、2 つの配列の結合であり、結果の配列に「順序」を適用できないことです。

4

1 に答える 1

1

これは、find_by_sql をよく使用する場所です。結果は、このメソッドを呼び出すモデルの属性としてカプセル化された要求された列を持つ配列として返されます。

http://ar.rubyonrails.org/classes/ActiveRecord/Base.html

~シャルル~

于 2012-06-19T15:00:11.903 に答える