`
yuhui1988
  • 浏览: 9931 次
社区版块
存档分类
最新评论

(转)一条SQL语句查询出成绩名次排名

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语句贴出来共享,抛砖引玉,希望大家多多指教,拍砖的轻点。

对于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.mark<b.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;
出处:http://www.i-sx.net/bbs/viewthread.php?tid=157887
分享到:
评论

相关推荐

    在VFP中利用SQL语言中的SELECT语句快速统计学生成绩.pdf

    一条简单的SQL语句就能完成原本需要多步骤、多公式才能完成的数据分析工作,极大提高了工作效率。 总结来说,SELECT语句不仅在日常的数据库操作中发挥着重要作用,更在教育行业的数据统计分析中显示出其便捷和高效...

    T-SQL高级查询

    compute进行汇总前面是查询的结果,后面一条结果集就是汇总的信息。compute子句中可以添加多个汇总表达式,可以添加的信息如下: a、 可选by关键字。它是每一列计算指定的行聚合 b、 行聚合函数名称。包括sum、...

    计算机二级VisualFoxPro上机考试题库与答案解析45.docx

    表单标题设为"奖牌查询",列表框的数据源通过SQL语句获取"国家"表中的国家名称,选项组有三个按钮,分别对应金牌、银牌和铜牌。 7. 表单事件编程: 在表单`sport_form`中,需要编写`Four.prg`程序,该程序统计...

    oracle命令

    ”并不是SQL语句的一部分,而是用来标识多条SQL语句的结束。例如: ```sql SELECT * FROM table1; SELECT * FROM table2; ``` - **通配符“*”**:使用“*”表示选择所有字段,但这种方式可能降低性能,因为它...

    数据库选择题和判断题.doc

    6. DELETE VIEW不是标准的SQL语句,因为它不能用于删除视图,而是用于删除记录。选项D正确。 7. 视图是从一个或多个基本表或视图中导出的表,它是一个虚表,不实际存储数据。选项B正确。 8. 关系模型的完整性规则...

    一道sql面试题附答案

    题目要求使用一句组合查询来实现对Wages表的数据统计,包括员工ID(Emp_id)、基本工资、工龄工资、工资总额以及按照工资总额排序的名次。这是一个涉及数据插入、计算字段、排序和行号生成的综合问题。 首先,我们...

    教育办公自动化(初中版)

    通过使用和打印学生成绩条、学生通知单、学生通知书(打印名次和打印科目可选)、录入成绩时语音校和算分板使教师对成绩处理更加轻松。 任意输入缺考和缺考统计,消除了学校因学生缺考而不易统计、分析数据的...

    教育办公自动化(高中版)

    通过使用和打印学生成绩条、学生通知单、学生通知书(打印名次和打印科目可选)、录入成绩时语音校和算分板使教师对成绩处理更加轻松。 任意输入缺考和缺考统计,消除了学校因学生缺考而不易统计、分析数据的...

    asp 自定义分段函数/求第N名成绩

    SQL语句是查询的关键部分,其主要作用是从成绩总表中筛选出符合条件的第N名成绩。 - **SELECT top 1**:选择前1条记录。 - **FROM 成绩总表**:指定数据来源表。 - **WHERE**:指定筛选条件。 - **ORDER BY**:按...

Global site tag (gtag.js) - Google Analytics