【问题标题】:Ruby on Rails Query HelpRuby on Rails 查询帮助
【发布时间】:2010-02-17 03:48:57
【问题描述】:

我目前有以下查询

User.sum(:experience, :group => "clan", :conditions => ["created_at >= ? and created_at <= ?", "2010-02-15", "2010-02-16"])

我想返回前 50 名的公会,从经验最多到最少,只返回前 50 名的经验。我将如何修改查询以实现该结果。我知道我需要 :limit => 50 来限制查询,但如果我添加 :order => "clan DESC" 我得到错误列 "users.experience" 必须出现在 GROUP BY 子句中或用于聚合功能

【问题讨论】:

  • 基于该 ActiveRecord 查询,您似乎正在聚合用户以查找从最有经验到最无经验排序的每个氏族的总经验。那是对的吗?准确说明“结果”的含义可能会有所帮助 - 如果您想要用户,则 sum 方法不是您想要的。
  • tomtoday - 这是正确的,我已经更新了原始问题以反映这一点。我应该用什么来替换 .sum?

标签: sql ruby-on-rails activerecord


【解决方案1】:

需要在order子句中重复计算

User.sum(:experience, :group => "clan", :order=> "sum(experience) DESC", :limit => 50, :conditions => ["created_at >= ? and created_at <= ?", "2010-02-15", "2010-02-16"])

【讨论】:

  • 这不行吗??我正在努力确保我的逻辑没有错误......