2017-09-03 107 views
0

我有如下表EmployeeSQL:语法错误:为了用ROW_NUMBER()函数

+----+--------+ 
| Id | Salary | 
+----+--------+ 
| 1 | 150 | 
| 2 | 290 | 
| 3 | 302 | 
+----+--------+ 

我使用下面的代码来找到第二个薪水最高:

with t as 
(
    select 
     Salary, 
     row_number() over (order by Salary desc) as salary_ord 
    from 
     Employee 
) 
select Salary 
from t 
where salary_ord == 2 

然而,我收到一个错误:

SyntaxError: near 't as (
select Salary, row_number() over (order by Salary desc) as salary_ord'

我在这里做错了什么?谢谢!

+1

您正在使用什么数据库?请适当标记。 –

回答

2

在SQL中,正确的比较运算符是=,而不是==。所以,这是您的查询的ANSI SQL版本:

with t as (
     select Salary, row_number() over (order by Salary desc) as salary_ord 
     from Employee 
    ) 
select Salary 
from t 
where salary_ord = 2; 

然而,你的错误意味着你的数据库不支持with或窗口功能。

0

在SQL Server中,

你可以这样做:

select top 1 Salary 
from Employee 
order by Salary desc 
offset 1 row fetch next 1 row only