Oracle 中的 SQL 查询中带有 HAVING 子句的 1 和 2 是什么意思?

A_J*_*A_J 0 sql oracle group-by having-clause

我在 Oracle DBMS 中创建了一个具有以下属性的员工表:部门号和薪水。我执行了这个查询:

SELECT deptno, SUM(salary)

FROM emp
GROUP BY deptno
HAVING 1 > 2 ;
Run Code Online (Sandbox Code Playgroud)

我认为 1 和 2 指的是 SELECT 语句中的“deptno”和“SUM(salary)”列。所以我在表中的“deptno”>“SUM(salary)”处放置了一条记录,如下所示:

deptno          salary
1001            5000
1002            1000
Run Code Online (Sandbox Code Playgroud)

输出是“未找到行”我期望第二行作为输出。请解释原因。

inv*_*sal 5

1和2是一个数字。1 > 2总是返回 false。HAVING 1 > 2意味着无论数据库中有多少行,它始终不会返回任何行。就像你在跑步一样while(false) { ... }

您可以在 ORDER BY 中使用 1 或 2 来指定按哪个列号排序。( http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj13658.html ),但不是 HAVING。

顺便说一句,因为您可以在 ORDER BY 中使用列号,所以您不应该使用它。这不是一个好的做法。假设您添加和删除了选择的列数。您要排序的字段的位置将会调整。最好通过名称或别名来指定它。对于其他开发人员阅读您的代码也更具可读性。