【问题标题】:Select sum with condition postgres sql + rails使用条件 postgres sql + rails 选择 sum
【发布时间】:2013-04-29 14:50:33
【问题描述】:

我想按用户 ID 对表“记录”组的得分列求和,稍后我想比较每个用户的得分总和。为此,我编写了以下查询

按用户求和

Recording.select("sum(score) 作为分数, user_id").group(:user_id).order("score DESC")

SELECT sum(score) as score, user_id FROM "recordings" GROUP BY user_id

比较总分

Recording.select("sum(score) 作为分数, user_id").group(:user_id).where("score > 200")

SELECT sum(score) as score, user_id FROM "recordings" WHERE (score > 200 ) 按用户 ID 分组

第二个查询没有返回有效记录

【问题讨论】:

    标签: sql ruby-on-rails postgresql aggregate-functions


    【解决方案1】:

    你没有评论score > 200的角色,但我怀疑,这就是你真正想要的:

    SELECT sum(score) AS sum_score, user_id
    FROM   recordings
    GROUP  BY user_id
    HAVING sum(score) > 200
    

    意思是,您希望总分(所有分数的总和)超过 200 的用户。 您的查询将构建超过 200 的单个分数的总和。可能,但不太可能?

    您通过使用列名作为聚合函数结果的别名为您的问题奠定了基础:

    <strike>sum(score) as score</strike>

    那是上膛的足枪。我使用sum_score 来消除歧义。

    您将别名与基列混淆了,因此您立即将自己击中了脚。您不能在 WHEREHAVING 子句中引用列别名,您只能引用基表。此外,您混淆了WHEREHAVING 的作用。 The manual has the basics about that..

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2010-11-05
      • 2017-03-30
      • 2018-03-08
      • 1970-01-01
      相关资源
      最近更新 更多