Count(*) with order by 不在 PostgreSQL 上工作,而在 Oracle 上工作

Gaj*_*mar 5 sql oracle postgresql

下面是在 Oracle 上运行但在 PostgreSQL 上不起作用的 Sql 查询。

select count(*) from users where id>1 order by username;
Run Code Online (Sandbox Code Playgroud)

我知道 order by 在此查询中没有任何意义,但仍然是它在 Oracle 上工作的原因。以下是 PostgreSQL 上的错误

ERROR: column "users.username" must appear in the GROUP BY clause or be used in an aggregate function
Position: 48
Run Code Online (Sandbox Code Playgroud)

SQL状态:42803

PostgreSQL 版本 9.6.3

vol*_*ron 3

Oracle的执行计划中可以看出,行聚合后没有排序,这表明Oracle实现的SQL引擎忽略了该短语。

为什么它在 PostgreSQL 中不起作用——因为运行 Postgres 的人知道他们在做什么;) 开玩笑,但在没有看到 Oracle 与 MySQL 源代码的情况下,这个问题对我来说是高度推测性的。更大的问题是 Oracle 和 MySQL 是否巧合允许这样做,或者因为 Oracle 拥有两者。

最后一点:如果您想问为什么类似的软件应用程序的行为不同,我认为包括您所指的版本也很重要。即使同一应用程序的不同版本也可能遵循不同的说明。