2014-04-04 64 views
0

我一直在試圖找到沒有使用限制的第三高薪表。在沒有限制的情況下在mysql中找到第三高薪水

在第二高的薪水的情況下,我使用

SELECT salary FROM table WHERE salary < (SELECT MAX(salary) order by salary desc

找到第三高限用我用

select salary from one order by salary desc limit 3,1

現在如何找到第n個薪水不使用限制?

+3

做什麼用'LIMIT'問題?爲什麼要避免使用你需要的條款? –

+0

沒有問題是有使用limit.but如果它可以完成計算任何第n行那麼它會很好。 – black

+0

y downvotes?這個查詢沒有意義嗎? – black

回答

11

嘗試此查詢,

SELECT * 
    FROM one one1 
    WHERE (3) = (SELECT COUNT(one2.salary) 
        FROM one one2 
        WHERE one2.salary >= one1.salary 
       ) 

這裏其中(n)喲可以將任意數量來返回最高的薪水。

入住這Demo SQLFiddle

+0

但它的方式更多的時間,然後使用LIMIT –

+0

小心擴展你做了什麼? –

+0

如果有重複的記錄,這個查詢將會失敗,例如,如果兩個僱員有相同的工資,那麼它將返回0行。 –

2

如何用變量做它? 只是想知道爲什麼你不想使用LIMIT

SELECT salary 
FROM 
(
    SELECT @rn := @rn + 1 rn, 
     a.salary 
    FROM tableName a, (SELECT @rn := 0) b 
    ORDER BY salary DESC 
) sub 
WHERE sub.rn = 3 
+1

它工作兄弟。你可以用plplain /詳細說明查詢。 – black

0

試試這個

SELECT * 
FROM table t1 
WHERE (3) = (
       SELECT COUNT(DISTINCT(t2.Salary)) 
       FROM table t2 
       WHERE t2.Salary >= t1.Salary 
       ); 
+0

你能解釋一下計數如何在上面的條件下工作1 - 最高的3 - 第三最高的困惑。 –

相關問題