加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

在Oracle SQL /分页中选择功效的范畴(限定)

发布时间:2021-01-18 09:17:05 所属栏目:站长百科 来源:网络整理
导读:假设我们有下表: CREATE TABLE "ARTICLE_COUNTER_STATISTICS_M"( "ID" NUMBER(19,0) NOT NULL ENABLE,"ITEMCOUNT" NUMBER(19,0),"VERSION" TIMESTAMP (6) DEFAULT SYSTIMESTAMP) 独一束缚是ID和VERSION字段. 也许在DB中的某些行的示例(时刻戳对付全部记录始

假设我们有下表:

CREATE TABLE "ARTICLE_COUNTER_STATISTICS_M"
(
  "ID"        NUMBER(19,0) NOT NULL ENABLE,"ITEMCOUNT" NUMBER(19,0),"VERSION" TIMESTAMP (6) DEFAULT SYSTIMESTAMP
)

独一束缚是ID和VERSION字段.

也许在DB中的某些行的示例(时刻戳对付全部记录始终沟通):

1374659422641   22  2014.02.26 09:45:01,000000000
1387797258001   7   2014.02.26 09:45:01,000000000
1387796687862   1   2014.02.26 09:45:01,000000000
1387800521317   1   2014.02.26 09:45:01,000000000

此刻,假如我们想要选择ID,itemcount并按itemcount对它们举办排序,我们将执行以下操纵:

SELECT id,SUM(itemcount) as count,version 
FROM ARTICLE_COUNTER_STATISTICS_m 
WHERE id != '0' 
GROUP BY id,version 
ORDER BY version DESC,SUM(itemcount) DESC

可是今朝还不清晰的是,我们怎样仅在必然范畴内选择功效.譬喻10至20项最重要的项目?我试过这样的工作:

SELECT id,count,version FROM( 
    SELECT id,version 
    FROM ARTICLE_COUNTER_STATISTICS_m 
    WHERE id != '0' 
    GROUP BY id,version 
    ORDER BY version DESC,SUM(itemcount) DESC 
) where rownum >= 0 and rownum <= 20

可是,假如“rownum> = n”中的n大于1(它只返回空功效),则无效.我知道也许必需行使ROW_NUMBER()函数来实现方针,但我无法让它事变.有任何设法吗?感谢!

办理要领

这是一个row_number示例:

SELECT * 
FROM   (SELECT id,itemcount,version,ROW_NUMBER() OVER (ORDER BY version DESC,itemcount DESC) AS rn
        FROM   (SELECT id,SUM(itemcount) as itemcount,version 
                FROM ARTICLE_COUNTER_STATISTICS_m 
                WHERE id != '0' 
                GROUP BY id,version
               )
        )
WHERE  rn BETWEEN 3 AND 20 -- just an example

请留意,row_number为具有沟通属性的项目分派恣意次序(按照window子句).以是,假如譬喻,你的前三个项目均具有版本= 100 = ITEMCOUNT 100和您行使RN 2和4之间,也没有声名哪一个将被解除在外.为了停止这种环境,可以行使品级,这(再次,由窗口子句界说)分派沟通的值沟通属性的项目.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读