1

我有一个简单的国家表,其中包含名称、大陆、人口和其他一些字段。

我正在尝试使用 ActiveRecord 执行以下 MySQL 查询

SELECT count(*), SUM(population), AVG(population) FROM countries wherecontinent='Asia'

我应该怎么做?

我试过了:

Country.where(:continent => 'Asia').count()

Country.where(:continent => 'Asia').sum(:population)

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

所有单独工作都很好,它们都返回数字(不是 ActiveRelation 对象),这意味着你不能做类似的事情

Country.where(:continent => 'Asia').count().sum(:population).average(:population)

4

2 回答 2

4

找到了解决方案:

结果 = Country.select("count(*) as num_countries, sum(population) as total_population, avg(population) as average_population).where(:continent => 'asia').to_a[0]

然后,您可以像这样访问结果:result.num_countries、result.total_population 和 result.average_population

于 2013-09-16T19:40:25.690 回答
0

你可以试试:

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

这将返回一个哈希:

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