2010-06-15 42 views
9

如何從表中檢索第二高的值從表中檢索第二高的值

+1

你可以請發表您的表結構和你有什麼試過沒價值? – oezi 2010-06-15 08:33:05

+3

和你正在使用的SQL方言。到目前爲止,似乎有兩個解決MySQL問題的答案,但我猜兩者都不適用於任何其他DBMS。 – Joey 2010-06-15 08:34:34

+1

如果表中有多個組(例如,LAST_NAME列),並且您希望檢索AGE第二高的人的每個LAST_NAME,問題就會變得更加有趣。是這種情況,還是隻想要整個桌子的第二高? – thomaspaulb 2010-06-15 08:52:11

回答

6

在MySQL中,你可以例如使用LIMIT 1, 1

SELECT col FROM tbl ORDER BY col DESC LIMIT 1, 1 

MySQL reference manual: SELECT Syntax)。

LIMIT子句可用於約束SELECT語句返回的行數。 LIMIT需要一個或兩個數字參數,它們都必須是非負整數常量(除了使用預準備語句時)。

使用兩個參數,第一個參數指定要返回的第一行的偏移量,第二個參數指定要返回的最大行數。在初始行的偏移量是0(不是1):

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 
+0

,同時按您希望獲得第二高的數量排序。 – icio 2010-06-15 08:34:08

+0

謝謝。更新 – aioobe 2010-06-15 08:35:29

1

可能:

SELECT * FROM table ORDER BY value DESC LIMIT 1, 1 
+0

也許..?順便說一句,如果你縮進你的代碼四個空格,你會得到一個漂亮的輸出。 – Patrick 2010-06-15 09:02:36

11
select max(val) from table where val < (select max(val) form table) 
2
SELECT E.lastname, E.salary FROM employees E 
WHERE 2 = (SELECT COUNT(*) FROM employess E2 
      WHERE E2.salary > E.salary) 

here
採取這一工作在幾乎所有的Dbs

+0

我相信>必須是> =。此外,如果任何較高排名的值有多個條目(例如,如果有兩名員工的薪水相同,並且您試圖讓員工獲得第二高薪水),那麼這將不起作用 – potatopeelings 2010-06-15 09:31:41

+0

不是那樣得到第三個?如果它有兩個較大的值......但看起來很桃色。 – ANeves 2010-06-15 09:32:40

2
Select Top 1 sq.ColumnToSelect 
From 
(Select Top 2 ColumnToSelect 
From MyTable 
Order by ColumnToSelect Desc 
)sq 
Order by sq.ColumnToSelect asc 
0

一個解決辦法是這樣的:

SELECT var FROM table ORDER BY var DESC LIMIT 1,1 
5

通過FIELD_NAME DESC LIMIT 1

+1

當你使用限制時,你不能使用頂部 頂部是用於SQL服務器 – Madhivanan 2010-06-15 09:27:05

2

酷,這幾乎是一樣的代碼高爾夫球選擇從表名順序頂部2 FIELD_NAME。

的Microsoft SQL Server 2005及更高版本:

SELECT * 
FROM (
    SELECT 
     *, 
     row_number() OVER (ORDER BY var DESC) AS ranking 
    FROM table 
) AS q 
WHERE ranking = 2 
+0

你需要使用'DENSE_RANK'來說明關係。 – 2010-08-11 08:37:56

2

試試這個

SELECT * FROM 
(SELECT empno, deptno, sal, 
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC NULLS LAST) DENSE_RANK 
FROM emp) 
WHERE DENSE_RANK = 2; 

這個工作在兩個Oracle和SQL Server。

+0

您的代碼在SQL Server上生成語法錯誤。毫無疑問可以移植,但。 – onedaywhen 2010-06-15 09:36:00

1

試試這個

SELECT TOP 1 Column FROM Table WHERE Column < (SELECT MAX(Column) FROM Table) 
ORDER BY Column DESC 

SELECT TOP 1 Column FROM (SELECT TOP <n> Column FROM Table ORDER BY Column DESC) 

ORDER BY ASC

的N更改得到任何位置

相關問題