我試圖從用戶分數條目列表中獲得總計用戶分數的排行榜。單個用戶在此表中可以有多個條目。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