我试图从用户分数条目列表中获得总计用户分数的排行榜。单个用户在此表中可以有多个条目。PostgreSQL窗口函数“列必须出现在GROUP BY子句中”
我有如下表:
rewards
=======
user_id | amount
我想补充了所有的amount
值的给定用户,然后对他们进行排名,在全球排行榜。下面是我试图运行查询:
SELECT user_id, SUM(amount) AS score, rank() OVER (PARTITION BY user_id) FROM rewards;
,我发现了以下错误:
ERROR: column "rewards.user_id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT user_id, SUM(amount) AS score, rank() OVER (PARTITION...
是不是user_id
已经在一个“聚合函数”,因为我想对其进行分区? PostgreSQL的手册显示以下条目,我觉得是我的直接并联,所以我不知道为什么我的不工作:
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
他们不是depname
分组,怎么让他们的作品?
例如,对于如下的数据:
user_id | score
===============
1 | 2
1 | 3
2 | 5
3 | 1
我期望以下输出(I都作了 “扎” 用户1之间和2):
user_id | SUM(score) | rank
===========================
1 | 5 | 1
2 | 5 | 1
3 | 1 | 3
所以用户1总分为5,并且排名第一,用户2与分数为5并且因此也是排名第一,并且用户3排名第三,得分为1.
你想要什么结果? –
@JuanCarlosOropeza增加了一些细节。 – aardvarkk