【问题标题】:column must appear in the GROUP BY clause or be used in an aggregate function Ruby列必须出现在 GROUP BY 子句中或用于聚合函数 Ruby
【发布时间】:2016-03-10 15:33:14
【问题描述】:

当我使用 Chartkick 将一些图表安装到我的 ruby​​ on rails 项目中时,我遇到了一个奇怪的错误,我无法解决或理解其他解释。

我将以下代码嵌入到我的视图文件中。

<%= area_chart @bets_by_month.group_by_day(:date_of_bet).sum(:profit_or_loss) %>

@bets_by_month 实例是这样在控制器中声明的

@bets_by_year = Bet.where("EXTRACT(YEAR FROM date_of_bet) = ?", params[:year])
@bets_by_month = @bets_by_year.where("EXTRACT(MONTH FROM date_of_bet) = ?", params[:month])
@bets_by_month = @bets_by_month.order("date_of_bet DESC")

当我尝试加载页面时返回错误。

PG::GroupingError: ERROR:  column "bets.date_of_bet" must appear in the GROUP BY clause or be used in an aggregate function

但是,当我将此代码嵌入到我的视图文件中时,我没有遇到任何问题。

<%= area_chart Bet.group_by_day(:date_of_bet).sum(:profit_or_loss) %>

我需要使用该实例的原因是因为我希望每个月都有一个不同的图表来显示该月的结果。

【问题讨论】:

  • 能否贴出运行图表代码时命中数据库的生成SQL?
  • 这是您要找的吗? Bet Load (0.3ms) SELECT "bets".* FROM "bets" (0.4ms) SELECT SUM("bets"."profit_or_loss") AS sum_profit_or_loss, (DATE_TRUNC('day', (date_of_bet::timestamptz - INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC') + INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC' AS day FROM "bets" WHERE (date_of_bet IS NOT NULL) GROUP BY (DATE_TRUNC('day', (date_of_bet::timestamptz - INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC') + INTERVAL '0 hour') AT TIME ZONE 'Etc/UTC'

标签: ruby-on-rails ruby postgresql


【解决方案1】:

问题是图表变得混乱,因为我将@bets_by_month 按降序排序。一旦我改变了一切都很好。

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 2018-05-16
    • 2012-12-05
    • 1970-01-01
    • 2013-11-05
    • 2021-06-25
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多