带有条件的SELECT子句

时间:2014-05-08 13:07:18

标签: sql oracle

表名: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));

我无法得到我想要的输出。这里没有任何错误吗?

3 个答案:

答案 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
相关问题