回答
假設標記是唯一的,下面的查詢給你第二大標記。
SELECT MAX(marks)
FROM ATable
WHERE marks < (SELECT MAX(marks) FROM ATable)
要獲得整個記錄,你可以在INNER JOIN
SELECT t1.*
FROM ATable t1
INNER JOIN (
SELECT marks = MAX(marks)
FROM ATable
WHERE marks < (SELECT MAX(marks) FROM ATable)
) t2 ON t2. marks = t1.marks
對於MySql:select * from atable where marks =(選擇max(marks)作爲secmax from atable where marks < (從可打印中選擇最大(標記))) – dharm0us 2010-11-30 07:42:04
是'(最大(標記)來自ATable的')'兌現或者這個查詢是否對每一行都運行?因爲這種方法在包含大約1000行的表上非常緩慢,謝謝 – 2011-05-09 11:25:39
@Gabriel - 請注意查詢只返回一行。在適當的索引表上,這會導致一次索引掃描和一次索引查找。這對任何值得使用的數據庫引擎都不應該是個問題。 – 2011-05-09 11:48:56
select max(number), id
from <tableName>
where number < (select max(number) from <tableName>)
你可以做一個
SELECT MAX(marks) FROM TABLE
WHERE marks NOT IN (SELECT MAX(marks) FROM TABLE)
但LIMIT應該有更好的表現那麼上面這個包起來,所以問題是你爲什麼不喜歡它?
如果你需要整行(所有列),這一個將做到這一點。另外,即使有幾個具有相同的第二最大值,它總是隻返回一行。
Select top 1 *
From (Select Top 2 *
From TABLE
Order By marks desc
) a
Order By marks asc
如果希望只有一行與真正的第二最大值,你應該使用:
select Top 1 *
from TABLE
where marks < (select max(marks) from TABLE)
Order by max desc
它可以通過CTE(SQL服務器2005+)也這樣做:
;With a as
(
Select Dense_Rank() over (order by marks desc) as nRank,
*
From TABLE
)
Select Top 1 *
from a
Where nRank=2
如果您想查看所有具有第二個最大標記的行,只需從先前的查詢中刪除TOP 1。
- 1. 大教堂的選擇 - 選擇第二個表格中的第012行
- 2. 選擇第二個最大訪問表
- 3. 從表格的第二行中選擇所有行?
- 4. 從組中選擇最大限制1
- 5. 選擇第二個可見表格行
- 6. 選擇表格中每一行的第二個單元格
- 7. 無法從第二個下拉列表中選擇
- 8. 選擇圖像中第二大區域
- 9. CSS選擇器來選擇第一個和第二個表格單元格
- 10. 無法從表格中選擇空格
- 11. extjs從第一個網格中選擇記錄並將選中的內容複製到第二個網格
- 12. jQuery - 選擇表中的第二行?
- 13. 如何在第二行選擇HTML表格的第二列到第五列?
- 14. 選擇第二大的字段的長度在一個表中
- 15. 從第二個表格無JOIN訂購
- 16. 如何在MySQL中選擇兩個表格,但僅從第二個表格中選擇一列?
- 17. 選擇表格colums從第二科拉姆名字起在MySQL
- 18. 從第二個下拉列表中選擇「全選」複選框
- 19. ow限制在one2many第二次(many2many)選擇相同的記錄?
- 20. sql join - 僅從第二個表中選擇第一行
- 21. 在第二張表中選擇第一張表中的第一張表格時,在第二張表格中更改表格數據
- 22. SQL - 從第一選擇到第二選擇的傳遞變量
- 23. 限制多個表格中的單元格選擇
- 24. Dropdownlist第二選擇第一選擇不顯示:無;
- 25. 從左連接中的第二個表中選擇字段
- 26. 從第二個表中選擇值,該ID在我的第一個表中
- 27. 無法選擇從選擇二
- 28. jquery填充第二選擇項目的選項大於第一選擇
- 29. 在第二個表格中隨機選擇3條記錄
- 30. 如何在查詢中選擇第二個表格?
什麼是你不喜歡LIMIT? – Unreason 2010-10-19 10:06:41
這是一個面試問題;) – viMaL 2010-10-19 10:20:44
我認爲這個問題本來可以解決它,而無需使用ORDER BY和LIMIT。因爲要求按O(n * log(n))排序,而面試官正在尋找O(n) – dharm0us 2010-11-30 07:43:29