簡體   English   中英

如何 Select 每個組的前 3 個最高值

[英]How to Select Top 3 Highest Values From Each GROUP

我有一個分數表,學生的測驗分數和作業分數按以下方式輸入

學生卡 課程編號 測驗1 測驗2 測驗3 測驗4 測驗5 作業一 作業二 作業3 作業4 作業5
1個 321 10 8個 4個 1個 9 7 3個 9 8個 5個
2個 321 6個 10 6個 3個 8個 4個 7 1個 8個 6個
3個 321 7 9 2個 8個 4個 10 7 5個 8個 3個
4個 321 7 2個 6個 4個 8個 3個 6個 9 10 5個
5個 321 3個 4個 5個 7 10 5個 7 8個 3個 9

現在我想要 select 最高的 3 個測驗數和最高的 3 個作業數,並將它們分別作為每個學生的總測驗數和總作業數。 為了更好地理解,我在上表中使用了粗體最高數字

結果應該是這樣的

學生卡 課程編號 測驗總數 作業總數
1個 321 27 24
2個 321 24 21
3個 321 24 25
4個 321 21 25
5個 321 22 24

我嘗試過的是 unpivot 技術,但結果不是我所期望的。 這是我試過的

SELECT TOP(3) StudentID,  Marks 
FROM
(SELECT StudentID,CourseID , Quiz1, Quiz2, Quiz3, Quiz4, Quiz5  FROM Marks) stu

UNPIVOT

(Marks FOR QuizNo IN (Quiz1, Quiz, Quiz3, Quiz4, Quiz5)) AS mrks 


WHERE    (CourseID = 321)
Order by Marks Desc



一種方法是使用 CROSS APPLY 取消旋轉和求和標記

SELECT StudentID, CourseID, qm.m, am.m
FROM Marks 
cross apply (
  select sum (q) m
  from (
     select top(3) q
     from (
       values
         (Quiz1),(Quiz2),(Quiz3),(Quiz4),(Quiz5)
       ) t(q)
     order by q desc
     ) tq
  ) qm
cross apply (
  select sum (q) m
  from (
     select top(3) q
     from (
       values
         (Assignment1),(Assignment2),(Assignment3),(Assignment4),(Assignment5)
       ) t(q)
     order by q desc
     ) tq
  ) am

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM