2017-03-22 82 views
0

在PostgreSQL我不能執行這個代碼聚合列必須在集團通過

SELECT name, SUM(sws) as sws, SUM(sws) over (partition by sws) swsrange FROM professoren 
JOIN vorlesungen on persnr = gelesenvon 
group by name 
order by sws desc 

的錯誤代碼是:

FEHLER:在德集團Spalte»vorlesungen.sws«搞亂-BY-Klausel erscheinen奧德在einer Aggregatfunktion verwendet werden LINE 1:SELECT姓名,SUM(SWS)如以上(由s分區SWS,SUM(SWS)...

該機構H e想要「sws」必須在聚合函數中(或實際上是)。

UPDATE:

我改成了

SELECT name, SUM(sws) as swscount, SUM(sws) over (partition by name) swsrange FROM professoren 
JOIN vorlesungen on persnr = gelesenvon 
group by name, sws 

輸出爲:

奧古斯丁,2,2- |康德,8,4 |波普,2,2- | Russel,2,5 | Russel,6,5 | Sokrates,2,6 | Sokrates,8,6

但它應該像第一列一樣是名字,第二是他給出的所有課程的總和(),第三是像最有經驗的排名:

Sokrates,10,1 | Kant,8,2 | Russel,8,2 | Augustinus,2,3 |波普爾,2,3

我在這裏看不到問題。 感謝您的幫助。

+0

'分區的sws' - 您使用SWS超過它分區,它需要像「名稱」一樣去分組。或者更好地移除組並按名稱在窗口中添加分區? –

+0

您可以寫一些示例數據,突出顯示您的期望輸出是什麼? (請在文本中寫入示例數據 - 不是圖像) – etsa

+0

@etsa i更新了sql查詢 – Kjenos

回答

1

您指定SUM(sws) over (partition by sws),但sws未在GROUP BY中指定。

你的問題的編輯後,它可能是你在找什麼?:

DROP TABLE T2; 
CREATE TABLE T2 (NAME VARCHAR(20), SWSCOUNT INT) 
; 
INSERT INTO T2 VALUES ('Augustinus',2), ('Kant',8), ('Popper',2), ('Russel',2), ('Russel',6),('Sokrates',2),('Sokrates',8); 

SELECT * FROM T2; 

SELECT *, DENSE_RANK() OVER (ORDER BY swscount DESC) 
FROM (SELECT NAME, SUM(SWSCOUNT) AS SWSCOUNT 
     FROM T2 
     GROUP BY NAME) X 

輸出繼電器:

name swscount 
1 Augustinus 2 
2 Kant 8 
3 Popper 2 
4 Russel 2 
5 Russel 6 
6 Sokrates 2 
7 Sokrates 8 

    name swscount dense_rank 
1 Sokrates 10 1 
2 Kant 8 2 
3 Russel 8 2 
4 Popper 2 3 
5 Augustinus 2 3 
+0

,但之後它再也沒有按「名稱」分組 – Kjenos

+0

您無法執行您在查詢中所寫的內容。你能寫一些樣本數據,突出你的期望輸出是什麼? (請寫文本示例數據 - 不是圖像) – etsa

+0

我更新了我的問題 – Kjenos