【问题标题】:Aggregation Column must be in Group By聚合列必须在 Group By
【发布时间】:2017-03-22 13:06:34
【问题描述】:

在 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« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden LINE 1: SELECT name, SUM(sws) as sws, SUM(sws) over (partition by s...

这意味着他希望“sws”必须在 group by 或聚合函数中(实际上是)。

更新:

我改成

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

但它应该像第一列是名字,第二列是他给出的所有课程的 sum(),第三列就像是一个拥有最多课程的排名:

苏格拉底,10,1|康德,8,2|罗素,8,2|奥古斯丁,2,3|波普尔,2,3

我在这里看不到问题。 感谢您的帮助。

【问题讨论】:

  • partition by sws - 您使用 sws 对其进行分区,因此它需要像“name”一样进行分组。或者更好地删除分组并按名称向窗口添加分区?..
  • 你能写一些示例数据,突出显示你想要的输出吗? (请以文本形式写入示例数据 - 而不是图像)
  • @etsa 我更新了 sql 查询

标签: postgresql


【解决方案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

【讨论】:

  • 但它不再按“名称”分组
  • 你不能做你在查询中写的。你能写一些样本数据,突出你想要的输出吗? (请以文本形式写入示例数据 - 而不是图像)
  • 哇!太好了,我整天都在尝试这个! :D 好主意,分两步完成!非常感谢!
  • @Kjenos 真的没什么“好”:这对于懂一点 sql 的人来说是很正常的 :-)
  • 无论如何,谢谢,对我来说太棒了。我的老师解释不好,根本不给教程,所以对我来说很难。我非常感谢:)
猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多