【问题标题】:MySQL to Postgres group_by errorMySQL 到 Postgres 组错误
【发布时间】:2014-07-02 21:38:29
【问题描述】:

以下查询在 MySQL 中运行良好(由 rails 生成):

SELECT
   sum(up_votes) total_up_votes 
FROM
   "answers" 
WHERE
   "answers"."user_id" = 100
ORDER BY
   "answers"."id" ASC

但它在 Postgres 中出现以下错误:

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

编辑:更新了查询。这是执行此查询的 Rails 模型:

class User < MyModel
  def top?
    data = self.answers.select("sum(up_votes) total_up_votes").first
    return (data.total_up_votes.present? && data.total_up_votes >= 10)
  end
end

【问题讨论】:

  • 也许有另一种方法告诉 rails 结果中只有一行,因此不要添加order by
  • 考虑到有多少 Rails 人使用 Postgres,我当然希望有办法。 MySQL 从来没有遇到过这个问题。
  • 看起来你应该可以使用 self.answers.sum(...).calculate(...) 对于这种情况:api.rubyonrails.org/classes/ActiveRecord/…(我不使用 Ruby on Rails,所以无法确认)

标签: mysql ruby-on-rails ruby-on-rails-3 postgresql ruby-on-rails-4


【解决方案1】:

查询可能在 MySQL 中执行,但我怀疑它“工作正常”。它只返回一行,所以排序没有意义。

您的问题对于您实际想要做什么含糊不清,但这应该会在两个数据库中产生与您的查询相同的结果:

SELECT sum(up_votes) as total_up_votes
FROM answers
WHERE user_id = 100;

【讨论】:

  • 我更新了问题。查询由 Rails 自动生成。如果我删除排序,Rails 仍然默认按 id 排序。这在 Postgres 中仍然不起作用。
  • @user3188544 。 . .如果在查询中添加group by user_id,这可能会说服Rails 不要用order by 做傻事。也许它在没有group by 的聚合查询中感到困惑。 (注:我的全部猜测。)
猜你喜欢
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2011-06-24
相关资源
最近更新 更多