首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL /Rank/稠密_Rank()对表中的字母进行排序

使用SQL /Rank/稠密_Rank()对表中的字母进行排序
EN

Stack Overflow用户
提问于 2016-05-12 14:55:13
回答 2查看 375关注 0票数 0

我有不同的等级,并根据他们的分数对他们进行了相应的排序:

代码语言:javascript
复制
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;

结果是:

代码语言:javascript
复制
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

然而,我想要做到的是按照他们的等级而不是他们的评分来对这些人进行排名

所以我想要实现的是:

代码语言:javascript
复制
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

我怎样才能做到这一点?谢谢,

EN

回答 2

Stack Overflow用户

发布于 2016-05-12 16:39:54

您应该能够完成在oracle和sql server中工作的操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-05-12 15:12:59

如果有帮助,我将在Server中使用以下内容。也许你(或某人)能翻译它?

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37190583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档