sql训练题及答案,SQL练习50题7
sql训练题及答案,SQL练习50题7where C=t.C的逻辑是 select t.* ((select count(distinct score) from sc where C = t.C and score > t.score) 1 ) px from sc t order by t.C px; 注意:SQL查询语句:保留名次空缺select t.* ((select count(1) from sc where C = t.C and score > t.score) 1 ) 排名 from sc t order by t.C 排名; 不保留名次空缺:
题目:按各科成绩进行排序,并显示排名
表结构:
思路:1)对某一分数,只要知道有多少个分数大于此分数, 1就是名次===保留名次空缺
2)对某一分数,只要知道有多少个不重复分数大于此分数, 1就是名次===不保留名 次空缺
SQL查询语句:
保留名次空缺
select t.* ((select count(1) from sc where C = t.C and score > t.score) 1 ) 排名 from sc t order by t.C 排名;
不保留名次空缺:
select t.* ((select count(distinct score) from sc where C = t.C and score > t.score) 1 ) px from sc t order by t.C px;
注意:
where C=t.C的逻辑是
1.t中取第一行值,包含S C score,譬如S:01 C:02 score:70
2.执行子查询
select count(1) from sc
where C = t.C and score > t.score
从sc中查询所有满足条件的条数: C=02且score>70
3.循环执行第一第二步,直至查询完t中全部的值
结果展示:
保留名次空缺:
不保留名次空缺: