在 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);
我在 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);