Oracle11g 查询不会给出确切的最高工资结果
这是我今天下午遇到的一个问题: 有一个表包含ID、emp_Name、emp_mailid和员工工资,获得oracle中工资最高的员工的姓名 这是我的桌子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 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
时喝了什么?