SQL 排名的问题,解释下

onlyonereason 2007-01-20 05:22:37
排序的问题~`
表我就不建立了
select *,(select count(*) from table1 b where b.总分>a.总分)+1 排名 from table1 a
不懂 其中的a b 到底是对实际表的一个引用 还是 对实际表的一个复制,
我一直认为选择是一个 “指针” 从表的 首行首列 按行 扫描筛选的,那么这句b.总分>a.总分 中“指针”是怎么找的 , 不理解 ,高手解释下
更多的排序 http://community.csdn.net/Expert/topic/5305/5305404.xml?temp=.222912 不明白
以前很急 就只想要个答案,现在我也看了好久也没看懂,书上好象也没说这样的例子,没分了 ,抱歉 都给“marco08(天道酬勤)”了 ^_^
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
onlyonereason 2007-01-21
  • 打赏
  • 举报
回复
顶下 大家解释下呀
onlyonereason 2007-01-21
  • 打赏
  • 举报
回复
嵌套循环我明白
关键是这句 where b.总分>a.总分
a , b都是代表table1
b.总分 不就是 a.总分 吗
凭什么说是b的一个总分 跟 a的每个总分 比较
这时候B的总分是单个值 但A的值确是一个集合 ??
yangala 2007-01-20
  • 打赏
  • 举报
回复
就好象是一个嵌套的循环嘛,如果用C语言写就像这样:

table a,b;
table 排名;
int cc;
for(pa=0;pa<count(a);pa++)
{
cc=0;
for(pb=0;pb<count(b);pb++)
if(pb->总分 > pa->总分)
cc++;
排名.push(cc);
}
baggio785 2007-01-20
  • 打赏
  • 举报
回复
a b是别名
select *,(select count(*) from table1 b where b.总分>a.总分)+1 排名 from table1 a
我一直认为选择是一个 “指针” 从表的 首行首列 按行 扫描筛选的,那么这句b.总分>a.总分 中“指针”是怎么找的

我是这样子理解的,这其实是2条不同的语句组成1条复杂的sql语句,比如查询分析器先执行from table1 a这个语句,那么按照你的说法,数据库会先执行这条语句并扫描table1(别名为a),然后执行select count(*) from table1 b where b.总分>a.总分.而且这2条语句可以看成是一个事务

不知道我说的你理解了么?
onlyonereason 2007-01-20
  • 打赏
  • 举报
回复
是B 的 总分 分别跟 A 中总分 比较
还是 A 总分 分别跟 B 中总分 比较 ??

onlyonereason 2007-01-20
  • 打赏
  • 举报
回复
b.总分>a.总分 这个是怎么回事啊
onlyonereason 2007-01-20
  • 打赏
  • 举报
回复
????
表的别名????
不是代表一个表 ?? 昏~~
marco08 2007-01-20
  • 打赏
  • 举报
回复
a, b是表的别名

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧