| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:怎么用SQL语句实现排名次?
只看楼主 加入收藏
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
收藏
得分:0 
以下是引用taifu945在2014-3-28 15:03:36的发言:

子查询中的是对照表,也就是辅助表;父查询中的表是原表。
谢谢你的解答,还想问改成 as b结果为什么就不对?
2014-03-28 15:10
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
那你子查询中的“a.zf”也要相应改成“b.zf”呀。
2014-03-28 15:32
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
以下是引用zengjun81357在2014-3-28 15:10:58的发言:

谢谢你的解答,还想问改成 as b结果为什么就不对?
如改成 as b ,句子中的也相应改成b
SELECT zf,(SELECT count(*)+1 FROM 成绩表 WHERE b.zf<zf) as jmc FROM 成绩表 as b
2014-03-28 15:49
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
收藏
得分:0 
以下是引用tlliqi在2014-3-28 15:49:08的发言:

如改成 as b ,句子中的也相应改成b
SELECT zf,(SELECT count(*)+1 FROM 成绩表 WHERE b.zf
楼上二位正解!
通过几个问搞清楚了主从查询对应的表,谢谢!
2014-03-28 15:58
zengjun81357
Rank: 2
等 级:论坛游民
帖 子:73
专家分:20
注 册:2011-3-27
收藏
得分:0 
以下是引用tlliqi在2014-3-28 15:49:08的发言:

如改成 as b ,句子中的也相应改成b
SELECT zf,(SELECT count(*)+1 FROM 成绩表 WHERE b.zf
原命令是将主查询表命名一个别名以区别子查询表,
同理将子查询表命名一个别名以区别主查询表,

SELECT zf,(SELECT count(*)+1 FROM 成绩表 as a WHERE 成绩表.zf<zf) as jmc FROM  成绩表
收到的鲜花
  • taifu9452014-03-29 12:31 送鲜花  10朵   附言:鼓励,学会举一反三了。
2014-03-28 16:09
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
SELECT zf,(SELECT count(*)+1 FROM 成绩表 WHERE a.zf<zf) as jmc FROM 成绩表 as a
改成如下不是好懂吗
SELECT a.zf,(SELECT count(*)+1 FROM 成绩表 WHERE a.zf<zf) as jmc FROM 成绩表 as a
SELECT zf中的ZF 是原表(成绩表)中一个字段现原别另表取别名,相应的字段也来一个别名,表示来区别辅表相同的字段
2014-03-30 11:25
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用tlliqi在2014-3-25 15:51:43的发言:

SELECT zf,(SELECT count(*)+1 FROM 成绩表 WHERE a.zf
该代码我用https://bbs.bccn.net/viewthread.php?tid=429395&pid=2399003&page=1#pid2399003中的数据测试了下,速度没有下面代码的运行速度快
程序代码:
SELECT XH,XM,TOT1 FROM BMK0651 ORDER BY  TOT1  DESC INTO CURSOR BTMP1 &&按分数降序
SELECT *,RECNO() AS RCN FROM BTMP1 INTO CURSOR  BTMP3  &&根据上面分数降序排列后产生记录号字段
SELECT TOT1,MIN(RCN) RCN FROM BTMP3 GROUP BY TOT1 ORDER BY TOT1 DESC INTO CURSOR BTMP2
SELECT B.XH,B.XM,A.TOT1,TRANSFORM(A.RCN,'99999') MCH FROM BTMP2 A INNER JOIN BTMP1 B ON B.TOT1=A.TOT1 INTO CURSOR BTMP3 && 此处用两表关联的方法,产生了一个临时表BTMP3,速度很理想,你可以试试
BROWSE
前者代码运行时间是后者的100倍(前者运行时间近6秒,后者运行时间0.050秒)   <测试时间:晚上23:50>后者较前者运行速度快
大家可以测试下
TONYDENG版主说的不错,代码是简单了,但运行速度如何,这是大概意思

[ 本帖最后由 sdta 于 2014-3-31 00:20 编辑 ]

坚守VFP最后的阵地
2014-03-30 23:58
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
以前我计算名次,都是通过 sele * from cjk orde by zf desc into talbe tmp 后,对临时表 tmp 写入名次号,再根据学号字段的唯一性,写回到cjk中,以完成名次的计算
现在我发现,不借助其他表,只要二个循环,也可以计算出名次来的。代码如下:
CLOSE DATABASES
USE cjk
nRec=RECCOUNT()
FOR i=1 TO nRec
  GO i       &&& 指针定位
  _cj=cjk.zf
  _mc=1       &&& 名次号初始值
  SELECT cjk
  GO TOP
  SCAN  
    IF cjk.zf>_cj  
      _mc=_mc+1  
    ENDIF  
    SELECT cjk
  ENDSCAN
  SELECT cjk   
  GO i       &&& 指针复位
  REPLACE cjk.mch WITH _mc       &&& 记录名次
ENDFOR

只求每天有一丁点儿的进步就可以了
2021-10-26 10:17
快速回复:怎么用SQL语句实现排名次?
数据加载中...
 
   



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

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