2014-04-23 38 views
0
SELECT Student.StudentID, 
     Student.FirstName, 
     Student.LastName, 
     Student.EmailID, 
     COUNT(SUBJECTS.SubjectID) as count from StudentMarks 
INNER JOIN Student 
     ON StudentMarks.StudentID=Student.StudentID 
INNER JOIN Subjects 
     ON StudentMarks.StudentID=Subjects.StudentID 
GROUP BY StudentMarks.StudentID 
ORDER BY count DESC LIMIT(),(); 

我通過以下計算總的元組數:如何查找記錄中降序排列的最後5條記錄?

SELECT COUNT(*) FROM (SELECT 
     Student.StudentID, 
     Student.FirstName, 
     Student.LastName, 
     Student.EmailID, 
     COUNT(SUBJECTS.SubjectID) as count from StudentMarks 
INNER JOIN Student 
     ON StudentMarks.StudentID=Student.StudentID 
INNER JOIN Subjects 
     ON StudentMarks.StudentID=Subjects.StudentID 
GROUP BY StudentMarks.StudentID 
ORDER BY count DESC) 
     as temp; 

不過,我需要這個疑問在我的第一個積分,並獲得最後的5個記錄。有沒有辦法做到這一點? Temp給我總共121條記錄,如果我可以從中減去5並使用限制函數,它可以解決我的問題。但我不知道如何在這裏集成查詢?請幫忙!!

+0

是它需要在DESC中排序? –

+0

將DESC更改爲ASC(或從ASC更改爲DESC)並使用LIMIT 5? – StanislavL

+0

可能重複的[MySQL組通過排序](http://stackoverflow.com/questions/924494/mysql-group-by-ordering) – Touchpad

回答

0

如果不要求DESC排序比你可以使用下面的方法:

SELECT Student.StudentID,Student.FirstName,Student.LastName,Student.EmailID, 
COUNT(SUBJECTS.SubjectID) as count from StudentMarks INNER JOIN Student ON 
StudentMarks.StudentID=Student.StudentID INNER JOIN Subjects ON 
StudentMarks.StudentID=Subjects.StudentID GROUP BY StudentMarks.StudentID ORDER BY count ASC 
LIMIT 5 

編輯具體要求

SELECT * FROM 
(
    SELECT Student.StudentID,Student.FirstName,Student.LastName,Student.EmailID, 
    COUNT(SUBJECTS.SubjectID) as count from StudentMarks INNER JOIN Student ON 
    StudentMarks.StudentID=Student.StudentID INNER JOIN Subjects ON 
    StudentMarks.StudentID=Subjects.StudentID GROUP BY StudentMarks.StudentID ORDER BY count ASC 
    LIMIT 5 
)main ORDER BY main.count DESC 
+0

我無需事實排序。我只想要最後5條記錄。 – MrCoder

+0

比您可以將ORDER BY計數DESC更改爲ORDER BY計數ASC然後限制5.檢查以上解決方案 –

+0

@llesh Patel - 我的要求是僅顯示最後5條記錄。 – MrCoder

0

試試這個:

select a.*,temp.C from (SELECT Student.StudentID, 
     Student.FirstName, 
     Student.LastName, 
     Student.EmailID, 
     COUNT(SUBJECTS.SubjectID) as count from StudentMarks 
INNER JOIN Student 
     ON StudentMarks.StudentID=Student.StudentID 
INNER JOIN Subjects 
     ON StudentMarks.StudentID=Subjects.StudentID 
GROUP BY StudentMarks.StudentID 
ORDER BY count DESC limit 5)a left join (SELECT StudentID,COUNT(*) as C FROM (SELECT 
     Student.StudentID, 
     Student.FirstName, 
     Student.LastName, 
     Student.EmailID, 
     COUNT(SUBJECTS.SubjectID) as count from StudentMarks 
INNER JOIN Student 
     ON StudentMarks.StudentID=Student.StudentID 
INNER JOIN Subjects 
     ON StudentMarks.StudentID=Subjects.StudentID 
GROUP BY StudentMarks.StudentID 
ORDER BY count DESC)temp on a.StudentID =temp.StudentID 
相關問題