繁体   English   中英

SQL COUNT(*)在PostgreSQL中不起作用,但在MySQL中

[英]SQL COUNT(*) doesn't work in PostgreSQL but in MySQL

我不知道为什么以下查询在MySQL中能完美地工作,而在PostgreSQL中却不能。

SELECT MAX(Anzahl) max_cnt, PID
FROM (
SELECT COUNT(*) Anzahl, PID, postID 
FROM PersonLikesPost
GROUP BY (postID) 
ORDER BY Anzahl DESC) as d

PostgreSQL说,我需要在GROUP BY子句中使用PID。 但是后来我得到了另一个结果。

问候。

由于以下原因,这在mysql中是可能的

MySQL扩展了标准SQL对GROUP BY的用法,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列。 这意味着前面的查询在MySQL中是合法的。 您可以使用此功能来避免不必要的列排序和分组,从而获得更好的性能。 但是,这主要在每个未聚合列中未在GROUP BY中命名的所有值对于每个组都相同时才有用。 服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。 此外,通过添加ORDER BY子句不会影响从每个组中选择值。 选择值之后,将进行结果集排序,并且ORDER BY不会影响服务器在每个组中选择哪个值。

在此链接中查看文档https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html

其他DBMS可能不会扩展GROUP BY的标准SQL使用,因此其他DBMS中的选择列表只能引用聚合列

即在其他DBMS中此查询

SELECT COUNT(*) Anzahl, PID, postID 
FROM PersonLikesPost
GROUP BY (postID) 

必须翻译成这个

SELECT COUNT(*) Anzahl, PID, postID 
    FROM PersonLikesPost
    GROUP BY Anzahl, PID, postID

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM