Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g 查询不会给出确切的最高工资结果_Oracle11g - Fatal编程技术网

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

Oracle11g 查询不会给出确切的最高工资结果,oracle11g,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 4

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

有一个表包含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


你能给我一个更好的查询吗?

如果它显示的最大值为78000,可能是因为薪水列是varchar而不是number

试试这个:

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

如果它显示的最大值为78000,可能是因为salary列是varchar而不是number

试试这个:

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

现在它的工作很好!非常感谢!但是为什么varchar不支持?@dineshnny-如果列是
varchar
varchar2
,则按字母顺序排序。按字母顺序,字符串“1000”位于字符串“92”之前(因为第一个字符“1”位于“9”之前)。这是
salary
列必须为
number
数据类型的100多个原因之一。开发人员在将
salary
列创建为
varchar2
时喝了什么?现在工作正常了!非常感谢!但是为什么varchar不支持?@dineshnny-如果列是
varchar
varchar2
,则按字母顺序排序。按字母顺序,字符串“1000”位于字符串“92”之前(因为第一个字符“1”位于“9”之前)。这是
salary
列必须为
number
数据类型的100多个原因之一。开发人员在将
salary
列创建为
varchar2
时喝了什么?