【问题标题】:Rails not getting average using postgresqlRails 使用 postgresql 没有达到平均水平
【发布时间】:2017-02-26 08:36:57
【问题描述】:

我正在学习 Active Record 和查询,并在我的 rails 控制台中编写了一个查询,我认为它应该很容易工作,但事实并非如此。

Statistic.select("player_id, sum(oreb)").group("player_id").limit(5)

这将返回以下 Active Record 关系

[#<Statistic:0x007f801b2f0240 id: nil, player_id: 1>, #<Statistic:0x007f801b2f00b0 id: nil, player_id: 2>, #<Statistic:0x007f801fcffed0 id: nil, player_id: 3>, #<Statistic:0x007f801fcffd40 id: nil, player_id: 4>, #<Statistic:0x007f801fcffbb0 id: nil, player_id: 5>]

oreb确实存在,我可以使用pgAdmin或者psql控制台工具直接执行查询

Select player_id, sum(oreb) from Statistics
GROUP BY player_id
LIMIT 5

并得到一个包含oreb的结果。

我进行了一些研究,但找不到一个简单的原因导致这不起作用...任何想法都将不胜感激...

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    模型Statistic 没有sum(oreb) 的列,无法映射到模型的属性,但可以检索数据。您可以通过给定名称将其提取到sum

    stats = Statistic.select("player_id, sum(oreb) total").group("player_id").limit(5)
    puts stats.first.total
    

    【讨论】:

    • 好的,这只是(就我而言,super 怪异在rails中。这确实有效,它给了我总数,但是,如果你输入puts stats.first.inspect,总价值不存在......所以现在我想问它存储在哪里?
    • 它存储在“sum(oreb)”属性中。试试Statistic.select("player_id, sum(oreb)").group("player_id").limit(5).first["sum(oreb)"]
    • 但是,我的意思是也许我对 rails 的理解不正确,这不应该也出现在检查中吗?可能是我理解检查错误?实际上,您刚刚放入的样本失败了,因为它试图按 statistics.id 排序
    • inspect 仅显示表中存在的列。 sub(oreb) 是动态生成的列。
    • inspect方法实现:github.com/rails/rails/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多