2017-09-03 45 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