【发布时间】:2015-10-21 10:31:19
【问题描述】:
我有员工表
EMP_ID | F_NAME | L_NAME | SALARY | JOINING_DATE | DEPARTMENT
-----------------------------------------------------------------------------------
101 | John | Abraham | 100000 | 01-JAN-14 09.15.00.000000 AM | Banking
102 | Michel | Clarke | 800000 | | Insaurance
102 | Roy | Thomas | 70000 | 01-FEB-13 12.30.00.000000 PM | Banking
103 | Tom | Jose | 600000 | 03-FEB-14 01.30.00.000000 AM | Insaurance
105 | Jerry | Pinto | 650000 | 01-FEB-13 12.00.00.000000 PM | Services
106 | Philip | Mathew | 750000 | 01-JAN-13 02.00.00.000000 AM | Services
107 | TestName1 | 123 | 650000 | 01-JAN-13 12.05.00.000000 PM | Services
108 | TestName2 | Lname% | 600000 | 01-JAN-13 12.00.00.000000 PM | Insaurance
我想在 oracle sql 中从上表中找到最高和最低薪水。 如果我这样做了
select max(salary) from (select * from (select salary from employee) where rownum <2);
它返回MAX(SALARY) = 100000 它应该返回800000
如果我这样做
select max(salary)
from (select * from (select salary from employee)
where rownum <3);
它返回MAX(SALARY) = 800000
如果我这样做
select min(salary)
from (select * from(select salary from employee)
where rownum < 2);
它将返回MIN(SALARY) = 100000,它应该返回70000。
这个查询有什么问题?
正确的查询应该是什么?
【问题讨论】:
-
工资列的数据类型是什么?你需要to_number()吗?
-
旁注:使用没有
order by子句的rownum过滤器通常是一个错误。 -
ROWNUM 不会确保返回的行的顺序。它只是一个伪列,在返回行后分配。如果没有
ORDER BY,则无法保证顺序并且随机返回行。见stackoverflow.com/a/30321788/3989608 -
如果他们帮助了你,你应该选择正确的答案。你目前没有给回答你问题的人任何功劳。
标签: sql oracle select oracle11g