表名:RANKTITLE,RANK
//RANKTITLE
TITLE
--------------
TEST1
TEST2
TEST3
TEST4
//RANK
TITLE SALARY
---------------------
TEST1 4500000
TEST2 80000
TEST3 26000
TEST4 1800000
所以我想显示除薪水最高等级以外的所有头衔
输出将如下:
TITLE SALARY
--------------------
TEST2 80000
TEST3 26000
TEST4 1800000
使用此查询
SELECT r.TITLE FROM RANKTITLE r WHERE
r.TITLE IN (SELECT TITLE FROM RANK) AND
(SELECT MAX(SALARY) FROM RANK WHERE r.TITLE=p.TITLE AND SALARY < MAX(SALARY));
我无法得到我想要的输出。这里没有任何错误吗?
答案 0 :(得分:1)
SELECT r.TITLE, salary FROM RANK r WHERE
salary not in (SELECT MAX(SALARY) FROM RANK);
如果您只有一个排名最高的记录,则只会将其排除在外。 如果您有多个排名最高的记录,则所有记录都将被排除。
select title from (
SELECT TITLE, rownum rnum FROM RANK
ORDER by salary desc, title)
where rnum <> 1;
将仅排除不幸的第一条记录。你甚至不需要RANKTITLE,除非你想要抓住更多的领域。
答案 1 :(得分:0)
测试一下:
SELECT r.TITLE, r.SALARY
FROM RANKTITLE r
WHERE r.SALARY < (SELECT MAX(s.SALARY) FROM RANK s)
答案 2 :(得分:0)
尝试此查询:
select r.title,r.salary from rank r
except
select r1.title,(select max(s.salary) from rank s)
from rank r1