| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:下面是网上一个学生成绩排名的代码,有几个不懂的地方请行家指教一下
只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:2 
下面是网上一个学生成绩排名的代码,有几个不懂的地方请行家指教一下
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

SELECT 语文, (SELECT COUNT(*)+1 FROM xscj.dbf WHERE a.语文< 语文) AS 语文名次 FROM xscj.dbf AS a
这是一个表本身的嵌套查询。它是怎样进行执行的?也就是解题思路如何?
1、这里a.语文< 语文中的语句的a.语文别名a是指何表的别名? 语文是指何表中的橍名?
2、为什么相同的分数只计算一次?
3、名次号为什么会不連续的?从何语句会产生这种不連续的效果?
见图
图1会原表,图2为排序后的表。请行家指教。多谢了。

搜索更多相关主题的帖子: 语文 网上 如何 
2011-04-21 22:32
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:20 
可以将你的表考虑成两个完全相同的表A与表B。
针对表A中的每一条成绩记录,找出表B中成绩更好的所有记录。如图所示。
图片附件: 游客没有浏览图片的权限,请 登录注册


成绩为70的同学因为其前面有3位成绩更优异的,所以排位第4
成绩为75的同学(共两位)因为其前面只有1位成绩更优异的,所以排位第2
成绩为80的同学因为其前面没有成绩更优异的,所以排位第1

你的SQL语句,正好得出如上的逻辑结果.

也可以用 left outer join 类似这样
select    a.id, a.grade, count(b.grade) + 1 as Ranking
from      A left join B on a.grade < b.grade
group by  a.id, a.grade
2011-04-22 00:39
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
png楼兄,谢谢你的指教。
我按你的代码对列名作一调正。
SELECT a.学校,a.语文,COUNT(b.语文)+1 as 名次 FROM xscj a LEFT join  xscj  b ON a.语文<b.语文 GROUP BY  a.学校,a.语文
产生结果与原表不同,如60分应排在第2位,但它排在第3位了。见图1
如果语句改为:对语文成绩分组
SELECT a.语文,COUNT(b.语文)+1 as 名次 FROM xscj a LEFT join  xscj  b ON a.语文<b.语文 GROUP BY  a.语文
只对对语文成绩分组统计,则产生的名次号与图1不相同,出来的现象是:1、中间出现几个断档,2、又如60分应为第2位,但它排在第3位了,不知为什么?
图1[附件ID:attach_1名称:2011-04-22_174217.jpg]图2[附件ID:attach_2名称:2011-04-22_181037.jpg]
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-04-22 18:34
快速回复:下面是网上一个学生成绩排名的代码,有几个不懂的地方请行家指教一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014891 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved