簡體   English   中英

通過不使用適用於Oracle的PostgreSQL來計算(*)順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM