Message.order("created_at DESC").where(user_id: current_user.id).group(:sender_id, :receiver_id).count
与我的开发环境SQLite3一起使用Rails 3.2应用程序,但在使用Postgres将其推送到Heroku时出现此错误:
PG::GroupingError: ERROR: column "messages.created_at" must appear in the GROUP BY clause or be used in an aggregate function
它似乎在查询中需要:created_at
。无法想出任何东西。有什么想法吗?
谢谢
答案 0 :(得分:1)
PostgreSQL无法确定如何通过created_at
订购。
假设您找到2组(:sender_id, :receiver_id)
,例如[1, 2]
和
[1, 3]
。
现在假设在第一组中有2条消息,一条来自1天前,一条来自1分钟前。并且让我们说你在12小时前在第二组中有1条消息
然后ORDER BY created_at DESC
没有任何意义:你是否将1天前的消息作为第一组的created_at
(因此第一组出现在第二组之后),或者从1分钟前(在这种情况下,第一组现在首先出现)?
这就是为什么PostgreSQL说你需要created_at
中的GROUP BY
(在这种情况下你现在有 3个不同的组,作为第一个一个现在被分成两部分),或者您需要使用聚合函数将created_at
的多个值转换为单个值。
这将运行(我不知道您期望结果是什么,您可能不想使用MAX(created_at)
!您可以找到PostgreSQL的聚合函数列表 here):
Message.order("MAX(created_at) DESC")
.where(user_id: current_user.id)
.group(:sender_id, :receiver_id)
.count