选择条件postgres sql + rails

时间:2013-05-05 20:22:02

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

我想按用户ID对表'录音'组的得分列进行求和,之后我想比较每个用户的得分总和。为此,我写了下面的查询

按用户加分

  

Recording.select(“总和(得分)为分数,   user_id“)。group(:user_id).order(”score DESC“)

     

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

比较得分总和

  

Recording.select(“总和(得分)为分数,   user_id“)。group(:user_id).where(”score> 200“)

     

选择总和(得分)作为得分,user_id FROM“录音”WHERE(得分>   200)GROUP BY user_id

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

sum(score) as score

这是一个装满的步枪。我使用sum_score来消除歧义。

通过混淆别名和基本列,你很快就把自己射中了脚。您不能在WHEREHAVING子句中引用列别名,您只能引用基表。此外,您混淆了WHEREHAVING的角色。 The manual has the basics about that.