簡體   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