- 30
- 0
- 约1.19千字
- 约 2页
- 2020-12-10 发布于河北
- 举报
一条 SQL 语句查询出成绩名次 排名
需求简述:
例如我有这样一个成绩表 编号 姓名 成绩
1
张三 90
2
李四 85
3
王五 100
4
赵六 85
5
汪一 100
6
周九 78
7
何二 56
然后我希望排名次, 因为这里有同分, 所以必然会出现并列名次。 网络上关于并列成绩名次排名有两种方式,其一是这样:
A
名次 姓名 成绩
1 王五 100
1 汪一 100
3 张三 90
4 赵六 85
4 李四 85
6 周九 78
7 何二 56
第二种还是这样:
B
名次 姓名 成绩
1 王五 100
1 汪一 100
2 张三 90
3 赵六 85
3 李四 85
4 周九 78
5 何二 56
SQL 语句是一种很实用的技巧, 希望和朋友们多交流, 现在抛砖引玉把自己的 3 句 SQL 语句贴出来共享,抛砖引玉,希望大家多多指教,拍砖的轻点。
1
对于 A 方式,比较好办, 以 Access 数据库为例 (其他数据库语法大同小异, 变化一下对应的即可),可以写成这样:
SELECT e.place AS 名次 , d.name AS 姓名 , d.mark AS 成绩
FROM [select a.id,count(b.id)+1 as place from sc a left join sc b on a.mark b.mark group by a.id]. AS e INNER JOIN sc AS d ON e.id = d.id;
同时 A 方式也可以写成这样,效果等同,不过估计比上面那句效率低点:
SELECT e.place AS 名次 , d.name AS 姓名 , d.mark AS 成绩
FROM [select a.id,count(iif(b.id is null,null,b.id))+1 as place from sc a left join
sc b on a.markb.mark group by a.id]. AS e INNER JOIN sc AS d ON e.id = d.id;
而 B 方式则比较棘手,写了半个钟头才写好 ....... :
SELECT e.place AS 名次 , d.name AS 姓名 , d.mark AS 成绩
FROM [select c.id,count(iif(c.mark is null,null,c.mark))+1 as place from (select a.id,b.mark from sc a left join sc b on a.mark b.mark group by a.id,b.mark)c group by c.id]. AS e INNER JOIN sc AS d ON e.id = d.id;
2
您可能关注的文档
最近下载
- 2026年考试题光谱分析基础理论知识测试题库.docx VIP
- 怎样把交流电变成直流电.ppt VIP
- 吹膜新员工安全培训课件.pptx VIP
- 2026年湖南财经工业职业技术学院单招职业技能测试题库附答案详解.docx VIP
- 建筑施工技术说课课件.ppt VIP
- 绿色清新模板.ppt VIP
- 2026年绵阳市国资委社会化招聘机关工作人员的备考题库及答案详解一套.docx VIP
- 国家建筑标准设计图集22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图(独立基础、条形基础、筏形基础、桩基础).pdf VIP
- 2026年常州工业职业技术学院单招职业适应性测试题库带答案解析.docx VIP
- 斜拉桥异形钢主塔竖向转体施工工法.pdf VIP
原创力文档

文档评论(0)