[英]Count(*) with order by not working on PostgreSQL which works on Oracle
下面是Sql查詢,它適用於oracle但不適用於PostgreSQL。
select count(*) from users where id>1 order by username;
我知道order by在這個查詢中沒有任何意義,但仍然是為什么它在oracle上工作。 以下是PostgreSQL上的錯誤
ERROR: column "users.username" must appear in the GROUP BY clause or be used in an aggregate function
Position: 48
SQLState:42803
PostgreSQL版本9.6.3
正如Oracle的執行計划所示 ,在聚合行之后沒有排序,這表明Oracle已實現的SQL引擎忽略了該短語。
為什么它不能在PostgreSQL中運行 - 因為運行Postgres的人知道他們在做什么;)開玩笑,但這個問題對我來說是高度推測的,沒有看到Oracle vs MySQL源。 更大的問題是Oracle和MySQL是否允許巧合,或者因為Oracle擁有這兩者。
最后說明:如果您要問為什么類似的軟件應用程序的行為不同,我認為包含您所指的版本也很重要。 甚至同一應用程序的不同版本也可能遵循不同的指令。
如果您只查找所有記錄的計數,則不需要order by
子句,因為它甚至在oracle中也沒有意義。 在這種情況下刪除order by
。
select count(*) from users where id>1
如果您正在尋找用戶名智能計數,那么就有用戶名排序的含義,在這種情況下您可以使用以下查詢。
select count(*) from users where id>1 group by username order by username;
希望你的疑問得到澄清。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.