在逐行排序中,我收到一条错误消息,说它错过了右括号,但我不明白为什么。
SELECT LAST_NAME AS "Last Name", DEPARTMENT_ID AS "Department Id", SALARY AS
Salary
FROM EMPLOYEES JOIN DEPARTMENTS
USING(DEPARTMENT_ID)
WHERE SALARY IN (SELECT MIN(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID, SALARY
ORDER BY DEPARTMENT_ID);
答案 0 :(得分:5)
order by
条件的右侧使用的子查询中不允许使用 in
。 Oracle期望order by
之前的右括号。
订购in
条件中使用的子查询的结果是没有意义的。
除此之外,您可能只想group by dept_id
(为什么salary
?这没有意义)。
答案 1 :(得分:3)
子查询中不允许使用order by子句
正如mathguy指出的那样,order by子句会导致抛出错误,并且它不会用于任何目的。
在查看您的查询后,我怀疑您想要执行相关子查询(在内部(子)查询中使用外部查询中的值)。
下面使用示例模式emp和dept(看起来很像你的表),由于条件e1.deptno = e.deptno
,我特意选择给定部门的最小工资。
具体而言,您可能担心与特定部门相关的最低工资。
SCOTT@dev>SELECT
2 e.ename,
3 e.sal,
4 d.*
5 FROM
6 emp e
7 JOIN dept d ON e.deptno = d.deptno
8 WHERE
9 1 = 1
10 AND
11 e.sal IN (
12 SELECT
13 MIN(e1.sal)
14 FROM
15 emp e1
16 WHERE
17 e1.deptno = e.deptno
18 )
19 ORDER BY d.deptno;
ENAME SAL DEPTNO DNAME LOC
MILLER 1300 10 ACCOUNTING NEW YORK
SMITH 800 20 RESEARCH DALLAS
JAMES 950 30 SALES CHICAGO