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

What does 1 and 2 with HAVING clause mean in SQL query in Oracle?

我在 Oracle DBMS 中创建了一个员工 table,其属性为:deptno 和 salary。 我执行了这个查询:

SELECT deptno, SUM(salary)

FROM emp
GROUP BY deptno
HAVING 1 > 2 ;

我认为 1 和 2 指的是 SELECT 语句中的 "deptno" 和 "SUM(salary)" 列。 所以我在 table 中的 "deptno" > "SUM(salary)" 处记录如下:

deptno          salary
1001            5000
1002            1000

输出为"No rows found" 我期待第二行作为输出。 请说明原因。

1和2是一个数字。 1 > 2 总是 return 错误。 HAVING 1 > 2 意味着无论你的数据库中有多少行,它总是 return 没有行。就好像你是运行while(false) { ... }

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

旁注,因为您可以在 ORDER BY 中使用列号,所以不应该使用它。这不是一个好习惯。假设您添加和删除了多少列 select。您要订购的字段的位置将被调整。您最好通过名称或别名来指定它。对于其他开发人员阅读您的代码也更具可读性。

这里 1 和 2 被称为整数而不是列名。因此它总是给出错误的值。你想做的事

Select deptno,sum(salary)
From emp
Group by deptno
Having deptno>sum(salary);