【问题标题】:how to do multiple calculations using ActiveRecord如何使用 ActiveRecord 进行多项计算
【发布时间】:2013-09-17 03:40:25
【问题描述】:

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

我正在尝试使用 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)

【问题讨论】:

  • 您真的想要接收同时计数、分组和平均的国家吗? :)
  • @lol007,我要求亚洲国家个数,亚洲总人口,亚洲各国平均人口数

标签: mysql ruby ruby-on-rails-3 activerecord


【解决方案1】:

找到解决方案:

result = 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

【讨论】:

    【解决方案2】:

    你可以试试:

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

    这将返回一个哈希:

    {'count(*)': count, ... }
    

    【讨论】:

    • 谢谢老兄,但我一直在寻找一种遵循 Rails 3 activerecord 语法的方法。找到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多