【问题标题】:Error with group(...) from SQlite to PostgreSQL in RailsRails 中从 SQlite 到 PostgreSQL 的组(...)出错
【发布时间】:2015-01-27 06:40:44
【问题描述】:

我正在尝试将我的应用程序上传到 heroku,但它在此语句中给了我一个错误:

@exhibition.enrolments.select(:id).group('payment_id')

ActiveRecord::StatementInvalid (PG::GroupingError: ERROR: column "enrolments.id" 必须出现在 GROUP BY 子句中或用于聚合函数中

在 SQlite 中我没有任何错误,但在生产中我有。

问题是:我有这个:

enrolment_id | payment_id | ....
1            | 1          | ....
2            | 1          | ....
3            | 2          | ....
4            | 3          | ....
5            | 3          | ....

我想获得注册的 ID 2,3 和 4。

我也试过这个:

@exhibition.enrolments.select(:id).group('enrolment.id, payment_id')

它有效,但它只是给了我所有的条目,显然......

我阅读了很多关于此的帖子,但我没有得到解决方案...

有什么帮助吗?谢谢。

编辑:

我的意思是:

我想获取注册的 ID 235

每个付款区块中具有相同 id 的最大 enrolment_id。

感谢弗兰克·海肯斯

【问题讨论】:

  • 您是否尝试过搜索“必须出现在 GROUP BY 子句中或用于聚合函数中”并使用您找到的任何方法? PS:停止在一个数据库上开发并在另一个数据库上进行部署,Rails/ActiveRecord 基本上没有给你任何有用的可移植性。
  • 是的,我尝试过并且仍在阅读,但我没有得到任何可能对我有用的解决方案。你是对的,但这只是我在 rails 中的第一个应用程序:/ Ty
  • "我想获得注册的 ID 2,3 和 4。"你能解释为什么这些 id 应该弹出吗?您的查询中应该有什么样的逻辑来选择这些值。我不知道 GROUP BY 应该如何工作,我错过了一些东西。

标签: ruby-on-rails postgresql heroku


【解决方案1】:

所以给它它想要的聚合函数?

@exhibition.enrolments.select(:id).group('payment_id').max(:id)

或者,您可以对记录进行排序并使用 distinct

@exhibition.enrolments.order('payment_id DESC').select(:payment_id).distinct

【讨论】:

  • 我不能投票给你的答案,但它有效......非常感谢!这正是我所需要的。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2016-08-13
  • 2011-10-06
  • 2018-08-01
  • 2018-10-13
相关资源
最近更新 更多