我试图从员工表中获得前5名薪水和第二名,但它也显示我的薪水最低
查看此图片工资栏
这是输出
这是我尝试的查询
SELECT MAX(Salary) FROM Employees
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employees )
select top 5 salary from Employees;
答案 0 :(得分:2)
您未获得正确结果的原因是因为您将salary
保存为string
。因此,200
中的string
将超过1000
中的string
。
要比较2个字符串,他们的字符将转换为ascii
个字符,然后根据ascii
个字符进行比较。因此ascii
中2
的{{1}}值超过200
中的1
。因此结果不正确。
要给出答案,这将按降序排列。
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;
另外,如上所述,你必须动态转换它或给行排名。