如何獲取無子查詢中最高的第二年薪在MySQL如何找到在mysql中第二高的薪水,而無需使用子查詢,限制和TOP子句
SELECT sal FROM jos_salary ORDER BY sal DESC LIMIT 1,1;
如何獲取無子查詢中最高的第二年薪在MySQL如何找到在mysql中第二高的薪水,而無需使用子查詢,限制和TOP子句
SELECT sal FROM jos_salary ORDER BY sal DESC LIMIT 1,1;
此promlem該解決方案易於使用的GroupWise完成最大方法通過基於每個行的較高數字將表加入自身。使用此方法,您可以檢索任何最喜歡的位置,取決於聯接的數量或計算單個聯接中的行數。取決於你最喜歡什麼方法(IMO第二個計數更優雅)。
下面是使用GroupWise的方法爲你的問題的解決方案:
SELECT s1.sal
FROM job_salary s1
LEFT JOIN job_salary s2 ON s1.sal < s2.sal
LEFT JOIN job_salary s3 ON s2.sal < s3.sal
GROUP BY s1.sal
HAVING MAX(s3.sal) IS NULL AND MAX(s2.sal) IS NOT NULL
或計數的連接匹配的數量:
SELECT s1.sal
FROM job_salary s1
LEFT JOIN job_salary s2 ON s1.sal < s2.sal
GROUP BY s1.sal
HAVING COUNT(DISTINCT s2.sal) = 1
順便說一句,如果你這樣做:
SELECT s1.sal, COUNT(DISTINCT s2.sal) AS sals_higher
FROM job_salary s1
LEFT JOIN job_salary s2 ON s1.sal < s2.sal
GROUP BY s1.sal
ORDER BY s1.sal DESC
您可以看到結果從最高到最低工資排序,以及序號s1
中的每一行都表示來自s2
的連接行數。當您在條件s1.sal < s2.sal
上加入表格時,對於每一行,它將加入s2
以上的工資數目,該數字高於s1
中的當前工資。
例如,在最高薪水上,沒有比這更高的薪水,因爲這是最高的薪水,這就是爲什麼你得到0
,而在第二高的薪水中,我們只有一個薪水更高,這是最高的,這是爲什麼我們得到了1
等等。
這裏的結果看起來的樣子:
+------+-------------+
| sal | sals_higher |
+------+-------------+
| 7100 | 0 |
| 7000 | 1 |
| 6900 | 2 |
| 5400 | 3 |
| 5000 | 4 |
| 4700 | 5 |
+------+-------------+
現在,所有你需要做的就是在HAVING
條款,而你的情況等於1
提供了適合的條件。
祝你好運! :-)
工作好人 – sms
這將努力找到第n個最大數量(自動遞增)
SELECT
TOP 1 * from (SELECT TOP nth_largest_no * FROM Products Order by sal desc) ORDER BY sal asc;
對於第五大salery
SELECT
TOP 1 sal from (SELECT TOP 5 sal FROM sal Order by price desc) ORDER BY sal asc;
這將有助於如果你能爲提供DDL表 –
爲什麼你想避免使用'LIMIT'? – user3409662
這個quation在採訪中詢問,沒有使用子查詢獲取第二高薪水 – sms