1

名前、大陸、人口、その他のフィールドを持つ単純な国テーブルがあります。

ActiveRecord を使用して次の MySQL クエリを実行しようとしています

SELECT count(*), SUM(population), AVG(population) FROMか国で、大陸='アジア'

どうすればいいですか?

私はもう試した:

Country.where(:大陸 => 'アジア').count()

Country.where(:大陸 => 'アジア').sum(:人口)

Country.where(:continent => 'Asia').average(:人口)

すべて個別にうまく機能し、すべて数値を返します (ActiveRelation オブジェクトではありません)。つまり、次のようなことはできません。

Country.where(:大陸 => 'アジア').count().sum(:人口).average(:人口)

4

2 に答える 2

4

解決策を見つけました:

result = Country.select("count(*) を num_countries、sum(人口) を total_population、avg(人口) を average_population).where(:continent => 'asia').to_a[0]

これにより、次のように結果にアクセスできます: result.num_countries、result.total_population、result.average_population

于 2013-09-16T19:40:25.690 に答える
0

次のようにsthを試すことができます:

ActiveRecord::base.connection.execute('SELECT count(*), SUM(population), AVG(population) FROM countries where continent='Asia')

これはハッシュを返します:

{'count(*)': count, ... }
于 2013-09-16T18:46:42.150 に答える