| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1154 人关注过本帖
标题:[求助]排序问题
只看楼主 加入收藏
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
结帖率:100%
收藏
 问题点数:0 回复次数:11 
[求助]排序问题
问题是这样:有一个表,他们的字段和数据如下:
姓名    语文   数学   总分    班级   年级
张三     90    80     170      1       2
赵四     82    80      162     2       2
李力     71    63      134     3       2
李 三    60     50      110    2       2
张灯     95     90      185    3       2
张灯结   100    99       199    1      2
李 四    98     90      189    3       2

请问各位高手,有没有比较快的方法,通过统计得到以下结果一个新表呢?   
  姓名    语文   数学   总分    班级排名   年级排名
  张灯结   100     99    199       1         1
  李 四    99     100    199       1         1
  张灯     95     90     185       2         2
  张三     90     80     170       2         3
  赵四     82     80     162       1         4
  李力     71     63     134       3         5
  李 三    60     50      110      2         6
搜索更多相关主题的帖子: 数学 语文 
2009-10-17 11:06
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:0 
SELECT A.姓名,A.语文,A.数学,总分,A.班级,A.年级,
(SELECT COUNT(*) FROM 成绩表 B WHERE A.班级=B.班级 AND A.总分<=B.总分) 班级排名,
(SELECT COUNT(*) FROM 成绩表 C WHERE A.年级=C.年级 AND  A.总分<=C.总分) AS 年级排名 FROM 成绩表 A
ORDER BY 班级,年级,班级排名,年级排名
2009-10-17 12:09
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
首先感谢楼2.但这里有几个问题值得探讨:1.成绩表B和成绩表C从何来, 表示什么内容呢? 2.总分相同该怎样排呢?
2009-10-17 16:28
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:0 
你直接复制代码执行.看结果.

A B C都是同个表,别名而已.

以下提供三中排名方式:

1.分数一样,同名靠后一位.
SELECT *,
(SELECT COUNT(*) FROM 成绩表 B WHERE A.班级=B.班级 AND A.总分<=B.总分) AS 班级排名 FROM 成绩表 A
ORDER BY 班级,年级,班级排名

2.分数一样,同名靠前一位.
SELECT *,
(SELECT COUNT(*) FROM 成绩表 B WHERE A.班级=B.班级 AND A.总分<B.总分)+1 AS 班级排名 FROM 成绩表 A
ORDER BY 班级,年级,班级排名

3.分数一样,名次不一样.
SELECT RECNO() AS IID,* FROM 成绩表 INTO CURSOR 成绩表_N &&如果原始表没有IID(自增型字段),用RECNO()来做为该字段,后面统计用.如果有自增型字段,这句可以省略.

SELECT *,
(SELECT COUNT(*) FROM 成绩表_N B WHERE A.班级=B.班级 AND A.IID<B.IID AND A.总分=B.总分)+(SELECT COUNT(*) FROM 成绩表_N B WHERE A.班级=B.班级 AND A.总分>B.总分)+1 AS 班级排名 FROM 成绩表_N A
ORDER BY 班级,年级,班级排名


[ 本帖最后由 hgfeng1984 于 2009-10-17 22:41 编辑 ]
2009-10-17 19:08
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
非常感谢hgfeng1984!但我还是有一点不明白,需要三个表,虽然是相同.意味在实际编程中,必须先把A表复制为B表、C表才能用以上代码吗?
2009-10-17 23:09
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:0 
没人说要复制呀.SQL里就是这么写的.
这个我也解释不了.
或许是这样,一个人叫张三,外号小三,小名狗蛋,小小名猫剩...
指的都是 成绩表,只是要比较同张表里的数据,给它起另外的名字而已.
实际中不会另外产生表.
2009-10-17 23:38
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
再次感谢hgfeng1984,你真是一位好心人。祝你好人一生平安!
2009-10-17 23:56
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
我把它放到实际问题中好象不能运行,说是里面有关键字不能识别.我还是有一点糊涂,同一个表有三个别名,系统怎么能识别呢?我代码如下:
SELECT *,(SELECT COUNT(*) FROM _temp71 WHERE _temp7.班级=_temp71.班级 AND _temp7.总分<=_temp71.总分)as 班级排名;
(SELECT COUNT(*) FROM _temp72 WHERE _temp7.年级=_temp72.年级 AND _temp7.总分<=_temp72.总分)as 年级排名;
 FROM _temp7 ORDER BY 名次,班级排名INTO CURSOR 7nj
2009-10-18 22:12
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:0 
粗略看了下,发现这么几个问题:
as 班级排名:后面少一逗号.

ORDER BY 名次:名次列哪里来的?

班级排名INTO:怎么能连在一起呢?

INTO CURSOR 7nj:7nj,为什么你要搞个数字开头的临时表呢?


还有点,别名看来你还是没搞懂.如果你表名称是 成绩表,那么基本上是这样的:

SELECT *,;
(SELECT COUNT(*) FROM 成绩表 _temp71 WHERE _temp7.班级=_temp71.班级 AND _temp7.总分<=_temp71.总分)as 班级排名,;
(SELECT COUNT(*) FROM 成绩表 _temp72 WHERE _temp7.年级=_temp72.年级 AND _temp7.总分<=_temp72.总分)as 年级排名 ;
FROM 成绩表 _temp7 ORDER BY 班级,班级排名,年级排名 INTO CURSOR Temp_7nj

BROWSE
 

[ 本帖最后由 hgfeng1984 于 2009-10-18 22:56 编辑 ]
2009-10-18 22:45
TZTJ
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:737
专家分:115
注 册:2008-1-15
收藏
得分:0 
我基本按照你去改,还是不行,说是语法错误.为什么你还在表名称前加成绩表呢?这不是多余吗?我存放成绩表的名称是_temp7.
2009-10-18 23:44
快速回复:[求助]排序问题
数据加载中...
 
   



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

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