【问题标题】: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 来消除歧义。
您将别名与基列混淆了,因此您立即将自己击中了脚。您不能在 WHERE 或 HAVING 子句中引用列别名,您只能引用基表。此外,您混淆了WHERE 和HAVING 的作用。 The manual has the basics about that..