在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«在GROUP-BY-Klausel erscheinen中发表的文章在einer Aggregatfunktion verwendet werden中 第1行:SELECT名称,SUM(sws)为sws,SUM(sws)结束(分区为s ...
这意味着他希望“sws”必须在聚合函数中或在聚合函数中(实际上是)。
更新
我把它改成了
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- |罗素,2,5- |罗素,6,5 |苏格拉底,2,6- |苏格拉底,8,6
但它应该像第一列是名称,第二列是他给出的所有课程的总和(),第三列是排名最多的排名:
苏格拉底,10,1 |康德,8,2 |罗素,8,2 |奥古斯丁,2,3- |波普,2,3-
我在这里看不到问题。 谢谢你的帮助。
答案 0 :(得分:1)
您指定了SUM(sws) over (partition by sws)
,但GROUP BY
未指定sws。
在您编辑问题之后,它可能是您要找的吗?:
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