查询不会给出确切的最高工资结果

时间:2017-03-07 07:26:04

标签: oracle11g

这是我今天下午得到的一个问题:

有一个表包含ID,emp_Name,emp_mailid和员工薪资,在oracle中获取第一高薪员工的姓名

这是我的表

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

这是我的疑问:

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

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

你能建议我更好的查询吗?

1 个答案:

答案 0 :(得分:3)

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

试试这个:

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