2016-05-12 30 views
0

我有不同的等級,並使用他們排名相應調整至其刻度:根據使用SQL /等級/ DENSE_RANK()表字母排序

select id,subject,semester,student,course,mark,grade 
,dense_rank() over(PARTITION by course order by mark desc) as RANK 
from courses c 
LEFT JOIN course_enrolments b ON c.id=b.course; 

,其結果是:

id subject semester student course mark grade rank 
5270 1001 126 1077055 5270 99  HD 1 
5270 1001 126 1076079 5270 98  HD 2 
5270 1001 126 1077334 5270 85  HD 3 
5270 1001 126 1076920 5270 84  DN 4 
5270 1001 126 1077443 5270 84  DN 5 
5270 1001 126 1072135 5270 67  CR 6 
5270 1001 126 1079997 5270 66  CR 7 
5270 1001 126 1071034 5270 62  PS 8 
5270 1001 126 1079993 5270 62  PS 9 
5270 1001 126 1074070 5270 44  FL 10 
5270 1001 126 1078409 5270 30  FL 11 
5270 1001 126 1073006 5270 28  FL 12 

但是我試圖做到的是排列這些人根據自己的成績沒有按照他們的標誌

所以我試圖做到的,是這樣的:

id subject semester student course mark grade rank 
5270 1001 126 1077055 5270 99  HD 1 
5270 1001 126 1076079 5270 98  HD 1 
5270 1001 126 1077334 5270 85  HD 1 
5270 1001 126 1076920 5270 84  DN 2 
5270 1001 126 1077443 5270 84  DN 2 
5270 1001 126 1072135 5270 67  CR 3 
5270 1001 126 1079997 5270 66  CR 3 
5270 1001 126 1071034 5270 62  PS 4 
5270 1001 126 1079993 5270 62  PS 4 
5270 1001 126 1074070 5270 44  FL 5 
5270 1001 126 1078409 5270 30  FL 5 
5270 1001 126 1073006 5270 28  FL 5 

我怎樣才能做到這一點? 謝謝,

+0

我認爲這樣做是創建一個表值參數來手動指定行列的最簡單方法到HD(如此,2列),然後將該表加入到您的第一張表格「等級」欄中。我會試圖寫出來,但我不熟悉PostgreSQL語法。 – Sturgus

回答

0

如果有幫助,我會在SQL Server中使用以下內容。也許你(或某人)可以翻譯它?

DECLARE @GradeRankTVP Table (
    Grade Varchar(2), 
    GradeRank int 
); 
INSERT INTO @GradeRankTVP (Grade, GradeRank) VALUES 
    (HD, 1) 
    ,(DN, 2) 
    ,(CR, 3) 
    ,(PS, 4) 
    ,(FL, 5) 
-- ,etc 
; 
select c.id, c.subject, c.semester, b.student, c.course, b.mark, b.grade 
, d.GradeRank 
from courses c 
LEFT JOIN course_enrolments b ON c.id = b.course 
LEFT JOIN @GradeRankTVP AS d on b.grade = d.Grade 
1

你應該能夠做到這一點,其在Oracle和SQL Server的工作原理:

select id,subject,semester,student,course,mark,grade, 
case when grade = 'HD' then 1 
    when grade = 'DN' then 2 
    when grade = 'CR' then 3 
    when grade = 'PS' then 4 
    when grade = 'FL' then 5 
end as RANK 
from courses c 
order by mark desc 
+1

或者在這種情況下,直接',當grad時......然後5結束爲rank',即dense_rank()變得毫無意義 –

+1

真的,最好不要在不需要時使用它。上面編輯,謝謝! – mo2