| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1902 人关注过本帖
标题:请大家帮忙解释一下代码 谢谢!
只看楼主 加入收藏
olderdream
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2009-3-17
结帖率:79.41%
收藏
已结贴  问题点数:20 回复次数:2 
请大家帮忙解释一下代码 谢谢!
请大家帮忙解释一下代码 谢谢!
能否请高人说明下面‘方法'中查询代码的原理,看起来不理解呀(理解了作用)

,特别是"WHERE 2”不明白呀 WHERE后面不是都跟着字段名称的么----



ACCESS有表 如下,要求取出各班前两名(允许并列第二)
Table1
+----+------+------+-----+
| id |SName |ClsNo |Score|
+----+------+------+-----+
|  1 |AAAA  |  C1  | 67  |
|  2 |BBBB  |  C1  | 55  |
|  3 |CCCC  |  C1  | 67  |
|  4 |DDDD  |  C1  | 65  |
|  5 |EEEE  |  C1  | 95  |
|  6 |FFFF  |  C2  | 57  |
|  7 |GGGG  |  C2  | 87  |
|  8 |HHHH  |  C2  | 74  |
|  9 |IIII  |  C2  | 52  |
| 10 |JJJJ  |  C2  | 81  |
| 11 |KKKK  |  C2  | 67  |
| 12 |LLLL  |  C2  | 66  |
| 13 |MMMM  |  C2  | 63  |
| 14 |NNNN  |  C3  | 99  |
| 15 |OOOO  |  C3  | 50  |
| 16 |PPPP  |  C3  | 59  |
| 17 |QQQQ  |  C3  | 66  |
| 18 |RRRR  |  C3  | 76  |
| 19 |SSSS  |  C3  | 50  |
| 20 |TTTT  |  C3  | 50  |
| 21 |UUUU  |  C3  | 64  |
| 22 |VVVV  |  C3  | 74  |
+----+------+------+-----+
结果如下
+----+------+------+-----+
| id |SName |ClsNo |Score|
+----+------+------+-----+
|  5 |EEEE  |  C1  | 95  |
|  1 |AAAA  |  C1  | 67  |
|  3 |CCCC  |  C1  | 67  |
|  7 |GGGG  |  C2  | 87  |
| 10 |JJJJ  |  C2  | 81  |
| 14 |NNNN  |  C3  | 99  |
| 18 |RRRR  |  C3  | 76  |
+----+------+------+-----+



方法:

select *
from Table1 a
where 2>(select count(*) from Table1 where ClsNo=a.ClsNo and Score>a.Score)
order by a.ClsNo,a.Score desc
搜索更多相关主题的帖子: 查询 
2012-09-19 23:18
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:20 
这个查询代码写得很好!
select *
from Table1 a
where 2>(select count(*) from Table1 where ClsNo=a.ClsNo and Score>a.Score)
order by a.ClsNo,a.Score desc
解析如下:
“from Table1 a”中,a是为Table1取的别名,方便后面引用。
“where 2>(select count(*) from Table1 where ClsNo=a.ClsNo and Score>a.Score)”是记录体的筛选条件,是理解这个查询的难点。
这个筛选条件中含有子查询:“(select count (*) from Table1 where ClsNo=a.ClsNo and Score>a.Score)”
是一个统计查询,你可以把它看作一个数n。这样筛选条件就可以看作:2>n
子查询中,再次引用了表table1的数据,并且统计所用的筛选条件与主查询的记录内容有关。
    子查询,用文字描述:同一个ClsNo,且Score值大于主查询当前记录的Score值的记录数。如果满足这个条件的记录数小于2,也就是Score值的排名在第1名和第2名的记录了。






做自己喜欢的事!
2012-09-23 19:59
olderdream
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2009-3-17
收藏
得分:0 
回复 2楼 netlin
谢谢版主的 指点 理解 中
2012-11-17 11:24
快速回复:请大家帮忙解释一下代码 谢谢!
数据加载中...
 
   



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

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