通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>在线服务>>疑难解答>>正文 新版上线![旧版]
注:打开慢时请稍等

select top n问题 (2)

http://www.iyit.net  日期:2006-5-3 19:23:02  来源:  点击:
参加讨论】 hi,everyone:

今天继续讨论select top n问题.
1. db2的m 2
在前一篇讨论中提到,由于db2的subquery不支持order by子句,因此无法构造m2. 实际上,db2提供了一组新的函数,称为 olap functions, 可以很好的支持top n问题.
m2:
select * from
( select mykey,rank() over (order by ord_col desc) as myrank
from mytable ) as ranked_table
where myrank<=n

利用olap函数,除了上一篇中所提方法,db2的m1又可以表示为:
select * from
( select mykey,row_number() over (order by ord_col desc) as myrank
from mytable ) as ranked_table
where myrank<=n

2. 除了m1, m2两种top n外,还有一种被db2称为 dense_rank, (m3). 通过下例分别说明.
m1: top 3 -- 1(4,101), 2(5,101), 3(1, 100) 或者1(4,101), 2(5,101), 3(2, 100)
m2: top 3 -- 1(4,101), 1(5,101), 3(1, 100), 3(2, 100)
m3: top 3 -- 1(4,101), 1(5,101), 2(1, 100), 2(2, 100), 3(3,99)
在db2中, m3如此实现:
select * from
( select mykey,dense_rank() over (order by ord_col desc) as myrank
from mytable ) as ranked_table
where myrank<=n

3. 为避免dbmss的方言问题, m2,m3可以有如下标准(sql 92)表示:
m2:
select * from mytable m1 where n>
( select count(*) from mytable m2
where m2.ord_col>m1.ord_col);
注意: 两个比较符都是 >
m3:
select * from mytable m1 where n>
( select count(distinct m2.ord_col) from mytable m2
where m2.ord_col>m1.ord_col);
注意: 与m2的不同在于distinct的使用
至于m1, 我目前还没有想到合适的标准写法,请补充.

4. 关于mysql
相对于各主流rdbms来说,mysql要简单,幼稚地多. 在运行mysql时发现居然不支持subquery. 因此mysql中的top n问题要复杂一些.
select * from mytable, mytable m2
where m2.ord_col>=m1.ord_col
group by m1.mykey
having count(m2.ord_col) <=n
但是,这个语句是有问题的. 一个极端的例子: 当所有的ord_col的数值都一样时. 如果哪位想到了如何解决这个问题,请补充.

----------------------------------------------------------------------------------
各语句已经测试过, example:
create table mytable(mykey int, ord_col int);
insert into mytable values(1, 100);
insert into mytable values(2, 100);
insert into mytable values(3, 99);
insert into mytable values(4, 101);
insert into mytable values(5, 101);

fang 6/26/2000


编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:select top n 问题
下一篇:microsoft sql server 7.0安装问题(一)
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
最新更新 热点排行 推荐新闻
exeplorer.exe错误的问题的总结、解决
哪些数据库是免费的?                
如何实现mysql中的用户管理?         
在存储过程中使用use database       
怎样在vc、delphi中使用mysql(mysql o
快速安装windows操作系统独家秘籍
30秒清除windows系统所有垃圾
系统盘符错乱的解决方案
由windows远程桌面想到的复制粘贴问题
不输密码照样登陆操作系统
完美解决一个事件激活多个函数(2)
初学javascript之cookie篇(译)
javascript对象与数组参考大全
用javascript 实现的dual listbox
javascript版的日期输入控件
qq密码被盗怎么办!我教你找回密码
winrar将推出免费正版序列号!
轻易破解winrar,winzip密码
备份软件ghost使用教程
xp中重新安装或修复ie6的三种方法
让winrar汗颜的压缩软件uharc
ghost批处理命令用法详解
qb这样拿!免费获取qb方法剖析
如何控制我的电脑只允许登录我自己的q
qq2006 beta3隆重发布 实用功能一一奉
exeplorer.exe错误的问题的总结、解决
快速安装windows操作系统独家秘籍
30秒清除windows系统所有垃圾
系统盘符错乱的解决方案
由windows远程桌面想到的复制粘贴问题
不输密码照样登陆操作系统
windows下的虚拟主机设置全功略
windows操作系统完美维护技巧
ghost备份问题精彩解决方法集锦
菜鸟学电脑之端口基础知识
qq号码激活的常见问题及案例分析 
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息