最低和最高工资显示

时间:2016-01-25 03:57:57

标签: sql sql-server sql-server-2008 stored-procedures

我试图从员工表中获得前5名薪水和第二名,但它也显示我的薪水最低

查看此图片工资栏

enter image description here

这是输出

enter image description here

这是我尝试的查询

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

select top 5 salary from Employees; 

3 个答案:

答案 0 :(得分:2)

您未获得正确结果的原因是因为您将salary保存为string。因此,200中的string将超过1000中的string。 要比较2个字符串,他们的字符将转换为ascii个字符,然后根据ascii个字符进行比较。因此ascii2的{​​{1}}值超过200中的1。因此结果不正确。

要给出答案,这将按降序排列。

SQLFiddle Demo for Top 5

1000

你可以用它来获取任何东西。像前5名

select salary,
rank() over(order by cast(salary as float) desc) 
as rnk from employee

仅次高

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

答案 1 :(得分:0)

顶级职能不应该给出前五名的薪水,但它是返回前5名的记录。 如果你想要前5名工资使用“order by” 喜欢这个..

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

答案 2 :(得分:0)

我认为你这样做是为了学习SQL目的。因此,如果您可以将salary列转换为整数(Alter table, Alter column),那将真正帮助您,您的查询将变得如下所示:

第二高:

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

'&LT;'或'&lt;&gt;'在这里效率更高,因为“NOT IN”是一项代价高昂的操作。

和前5名:

SELECT TOP 5 salary 
FROM   employees 
ORDER  BY salary DESC; 

另外,如上所述,你必须动态转换它或给行排名。