我有一個3列的表,student_id
,section_id
和marks
,每個都包含整數值,其中student_id
是具有唯一值的主字段。現在我需要編寫以下3個場景查詢(PS:這僅僅是爲了學習的目的,所以這將是巨大的,如果你能告訴我,如果可能的一些替代的邏輯方法):Mysql查找來自每個組的多行
- 找到學生誰在每個部分排名第三。
- 查找每個部分中排名第2,3,4的學生。
- 找到每個部分中排名第4的學生,如果有任何限制條件,如果某個部分中有多個學生的標記相同,則跳過下一個等級。因此,假設有3名學生獲得了相同的分數,這些分數將在一個分區中排名第二,然後跳過第三和第四分數,並且下一名得分低於他們的學生將排在第五名。
對於第一個我想:
SELECT * FROM `students` s
WHERE s.student_id=
(
SELECT student_id
FROM students
WHERE s.section_id=section_id
ORDER BY marks DESC
LIMIT 2,1
)
GROUP BY section_id
ORDER BY marks DESC
這工作,雖然我不知道關於優化。
在接下來的一個我用IN
原因,否則我不能在子查詢取多行嘗試,但它說,MySQL不支持LIMIT
在IN
條款,有沒有什麼辦法來修改這個查詢第二種情況?
最後,我不知道該怎麼做第三個。
我在http://sqlfiddle.com/#!2/6442fb/1
讚賞任何幫助創建了一個測試表。
選中此http://stackoverflow.com/questions/2160262/query-for-second-maximum-salary -from-employee-table – Damodaran
這是有效的,但它是一個'無證'的解決方案(除非你在處理這個東西的手冊頁面上計算用戶評論部分)。 – Strawberry