以下是适用于oracle但不适用于PostgreSQL的Sql查询。
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
答案 0 :(得分:3)
正如Oracle's execution plan所示,在聚合行之后没有排序,这表明Oracle已实现的SQL引擎忽略了该短语。
为什么它不能在PostgreSQL中运行 - 因为运行Postgres的人知道他们正在做什么;)开玩笑,但这个问题对我来说是高度推测的,没有看到Oracle vs MySQL源代码。更大的问题是Oracle和MySQL是否允许巧合,或者因为Oracle拥有这两者。
最后说明: 如果您要问为什么类似的软件应用程序的行为不同,我认为包含您所指的版本也很重要。即使同一应用程序的不同版本也可能遵循不同的指令。
答案 1 :(得分:2)
如果您只查找所有记录的计数,则不需要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;
希望你的怀疑得到澄清。