列 "likes.id" 必须出现在 GROUP BY 子句中或用于聚合函数中
column "likes.id" must appear in the GROUP BY clause or be used in an aggregate function
所以我尝试使用带有以下语句的 postgresql 为我的 Sinatra 项目添加热门帖子功能 Like.group(:exercise_id).order('COUNT(exercise_id) DESC').each do |like|
但是当我尝试这个时,我收到一条错误消息 column "likes.id" must appear in the GROUP BY clause or be used in an aggregate function
当我添加这个
Like.group(:exercise_id, :id).order('COUNT(exercise_id) DESC')
当我只想按喜欢分组时,它给了我整个 table。有解决办法吗?
错误告诉您的是,您正在 select 搜索“likes.id”,但数据库无法为您提供 likes.id。
这是因为默认情况下,当您不告诉 Rails 您需要什么时,Rails 会 select 一切。
想想,你真的需要“likes.id”吗?在我看来,您正在按 exercise_id 分组,因此您想要获得的是练习和类似的计数。 (如果我错了,请纠正我。)您实际上不需要像 id-s 这样的特定内容。
如果是这样,我们需要告诉 rails 我们的意图。
Like.group(:exercise_id).order('COUNT(exercise_id) DESC').select(:exercise_id)
如果您还需要计数本身,只需将其添加到 select。
您可能想尝试的其他东西只是 .count
。它非常聪明,会尊重您的分组。看看这是否有帮助。
Like.group(:exercise_id).count
所以我尝试使用带有以下语句的 postgresql 为我的 Sinatra 项目添加热门帖子功能 Like.group(:exercise_id).order('COUNT(exercise_id) DESC').each do |like|
但是当我尝试这个时,我收到一条错误消息 column "likes.id" must appear in the GROUP BY clause or be used in an aggregate function
当我添加这个
Like.group(:exercise_id, :id).order('COUNT(exercise_id) DESC')
当我只想按喜欢分组时,它给了我整个 table。有解决办法吗?
错误告诉您的是,您正在 select 搜索“likes.id”,但数据库无法为您提供 likes.id。
这是因为默认情况下,当您不告诉 Rails 您需要什么时,Rails 会 select 一切。
想想,你真的需要“likes.id”吗?在我看来,您正在按 exercise_id 分组,因此您想要获得的是练习和类似的计数。 (如果我错了,请纠正我。)您实际上不需要像 id-s 这样的特定内容。
如果是这样,我们需要告诉 rails 我们的意图。
Like.group(:exercise_id).order('COUNT(exercise_id) DESC').select(:exercise_id)
如果您还需要计数本身,只需将其添加到 select。
您可能想尝试的其他东西只是 .count
。它非常聪明,会尊重您的分组。看看这是否有帮助。
Like.group(:exercise_id).count