Sql 最低和最高工资显示

Sql 最低和最高工资显示,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我试图从员工表中获得前五名和第二名,但它也显示了最低工资 检查此图片的“薪资”列 这就是输出 这就是我尝试的问题 SELECT MAX(Salary) FROM Employees WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employees ) select top 5 salary from Employees; Top函数不应给出前五名薪资,但返回前五名记录。 如果您希望前五名薪资使用“订购依据” 像这样 select top 5

我试图从员工表中获得前五名和第二名,但它也显示了最低工资

检查此图片的“薪资”列

这就是输出

这就是我尝试的问题

SELECT MAX(Salary) FROM Employees
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employees )

select top 5 salary from Employees; 

Top函数不应给出前五名薪资,但返回前五名记录。 如果您希望前五名薪资使用“订购依据” 像这样

select top 5 salary from Employees order by Convert(numeric(18,2),salary) desc;

Top函数不应给出前五名薪资,但返回前五名记录。 如果您希望前五名薪资使用“订购依据” 像这样

select top 5 salary from Employees order by Convert(numeric(18,2),salary) desc;

您没有得到正确结果的原因是您正在将
工资
保存为
字符串
。因此
string
中的
200
将超过
string中的
1000
。 要比较两个字符串,将其字符转换为
ascii
字符,然后基于
ascii
字符进行比较。因此
200
2
ascii
值大于
1000中的
1
。因此,结果不正确

为了给出你的答案,这将按降序给你排名

你可以用这个得到任何东西。比如前五名

select * from 
(select salary,rank() over(order by cast(salary as float) desc) 
  as rnk from  employee)
where rnk <=5

您没有得到正确结果的原因是您正在将
工资
保存为
字符串
。因此
string
中的
200
将超过
string中的
1000
。 要比较两个字符串,将其字符转换为
ascii
字符,然后基于
ascii
字符进行比较。因此
200
2
ascii
值大于
1000中的
1
。因此,结果不正确

为了给出你的答案,这将按降序给你排名

你可以用这个得到任何东西。比如前五名

select * from 
(select salary,rank() over(order by cast(salary as float) desc) 
  as rnk from  employee)
where rnk <=5

我认为您这样做是为了学习SQL。因此,如果您可以将salary列转换为integer(),这将非常有帮助,您的查询将变得非常简单,如下所示:

第二高:

SELECT max(salary)
FROM employees
WHERE salary < (SELECT max(salary) 
                FROM employees);

否则,如上所述,您必须动态地转换它或为行赋予等级。

我认为您这样做是为了学习SQL。因此,如果您可以将salary列转换为integer(),这将非常有帮助,您的查询将变得非常简单,如下所示:

第二高:

SELECT max(salary)
FROM employees
WHERE salary < (SELECT max(salary) 
                FROM employees);

否则,如上所述,您必须动态转换它或为行提供等级。

我也这样做,但这会显示相同的结果,输出中也会显示最低工资。.有什么解决方案吗?@scorpio it需要转换。现在检查it@scorpio我可以知道原因吗,为什么您使用nvarchar数据类型作为工资?无论您需要转换什么。这可能是整数转换,我也会这样做,但这会显示同样的结果,最低工资也会显示在输出中..有什么解决方案吗?@scorpio需要转换。现在检查it@scorpio我可以知道原因吗,为什么您使用nvarchar数据类型作为工资?无论您需要转换什么。它可以是整数转换器行数语法或行数语法