2017-03-07 44 views
0

这是一个问题,今天下午我:查询不会给确切的最高薪水的结果

有一个表包含ID,EMP_NAME,emp_mailid和雇员薪金,获得第一薪水最高的员工的名字,在Oracle

在这里,这是我的表

id emp_name emp_mailid   salary 
2 dinesh  [email protected]  5000 
3 ganesh  [email protected]  6000 
6 ramesh  [email protected]  4500 
10 suresh  [email protected]  10000 
11 rajesh  [email protected]  15000 
15 kamesh  [email protected]  16000 
16 kamalesh [email protected]  7800 
19 neelash  [email protected]  12563 
20 rajan  [email protected]  156231 
22 vignesh  [email protected]  45220 
30 rubesh  [email protected]  78000 
31 john  [email protected]   6522 

,这我的查询:

select * 
    from 
    (
    select 
     salary 
      ,dense_rank() over (order by salary desc) ranking 
    from test 
) 
    where ranking = 1 

当我执行此操作时,它显示最高工资为78000,但实际上其错误的最高工资为156231

您能否建议我一个更好的查询?

回答

3

如果它显示最大值为78000,可能是因为工资栏是varchar而不是数字。

试试这个:

select * 
    from 
    (
    select 
     salary 
      ,dense_rank() over (order by to_number(salary) desc) ranking 
    from test 
) 
    where ranking = 1 
+0

现在它工作正常!很感谢! 但为什么varchar不支持? –

+0

@dineshdanny - 如果该列是“varchar”或“varchar2”,则按它排序*按字母顺序排列。按照字母顺序,字符串'1000'出现在字符串'92'之前(因为第一个字符'1'在'9'之前)。这是“工资”列**必须是“数字”数据类型的100多个原因之一。当他们将'salary'列创建为'varchar2'时,开发人员喝了什么? – mathguy