| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:png楼兄,谢谢你的指教。但你所提供的代码结果与不对
只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:7 
png楼兄,谢谢你的指教。但你所提供的代码结果与不对
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位了。-60与20均为13名等见图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[
 
图片附件: 游客没有浏览图片的权限,请 登录注册
       图2     
图片附件: 游客没有浏览图片的权限,请 登录注册
原表排序图
图片附件: 游客没有浏览图片的权限,请 登录注册

  
搜索更多相关主题的帖子: 统计 
2011-04-23 18:34
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
png楼兄怎么没有回音呀
2011-04-25 22:05
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:20 
不好意思,这两天没上网.

JOIN与子查询,结果应该一样. 你记得你的问题语句用的是子查询,所以猜测用JOIN换个角度看问题,也许对问题的理解有些帮助.

假如你的这张表 XSCJ 有主键"ID" - 我举的例子用了有ID列. 类似这样,应该得出你原来同样的结果

SELECT a.语文,COUNT(b.语文)+1 as 名次 FROM xscj a LEFT join  xscj  b ON a.语文<b.语文
GROUP BY  a.ID, a.语文

针对你的问题,
1、中间出现几个断档. 这是因为130分排名第一,2个60分排名并列第二,30分正好排第四. 我给你的例子好象也是类似的情况.



[ 本帖最后由 png 于 2011-4-25 23:47 编辑 ]
2011-04-25 23:11
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:0 
又看了下,因为有类似重复记录

学校  班级       语文
一中  1班        20
一中  1班        20
一中  199班      60
一中  199班      60

所以不能用-
GROUP BY  a.学校,a.语文
GROUP BY  a.语文
GROUP BY  a.学校,a.班级,a.语文


[ 本帖最后由 png 于 2011-4-25 23:46 编辑 ]
2011-04-25 23:37
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
png;楼兄

数据庫没有id 主鍵
1。如不用 rgoup by 语句,就出来提示sql rgoup by 缺少或无效

SELECT a.语文,COUNT(b.语文)+1 as 名次 FROM xscj a LEFT join  xscj  b ON a.语文<b.语文

2。如用GROUP BY  a.语文,出来的名次号不对

SELECT a.语文,COUNT(b.语文)+1 as 名次 FROM xscj a LEFT join  xscj  b ON a.语文<b.语文 GROUP BY  a.语文
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 sylknb 于 2011-4-26 18:35 编辑 ]
2011-04-26 18:33
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:0 
没有主鍵又有重复记录, 那样的话不适合用GROUP BY得到你要的排序.

你原来的语句 -

SELECT 语文, (SELECT COUNT(*)+1 FROM xscj.dbf WHERE a.语文< 语文) AS 语文名次 FROM xscj.dbf AS a

并没有错误, 应该是很好的办法了.

2011-04-27 03:09
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
谢谢您的指教。问题是不理介他的代码。
下述理介不知对否?请明示,谢谢!
1、a.语文是查询结果表FROM xscj.dbf AS a 中的列名,语文是原xscj.dbf的列名
2、SELECT 语文, (SELECT COUNT(*)+1 FROM xscj.dbf WHERE a.语文< 语文) AS 语文名次 FROM xscj.dbf AS a
用红色表示的是查询结果后表(2.JPG),用兰色表示的是原成绩表(1.jpg)。是把一个表好象分成实表与虚拟表(查询)。
图片附件: 游客没有浏览图片的权限,请 登录注册
   
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-04-27 18:34
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:0 
1、a.语文是查询结果表FROM xscj.dbf AS a 中的列名,语文是原xscj.dbf的列名

YES.

2、SELECT 语文, (SELECT COUNT(*)+1 FROM xscj.dbf WHERE a.语文< 语文) AS 语文名次 FROM xscj.dbf AS a
用红色表示的是查询结果后表(2.JPG),用兰色表示的是原成绩表(1.jpg)。是把一个表好象分成实表与虚拟表(查询)。

NO. 红,兰色的 xscj.dbf 说的都是同一张原成绩表(1.jpg).
2011-04-29 00:16
快速回复:png楼兄,谢谢你的指教。但你所提供的代码结果与不对
数据加载中...
 
   



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

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