• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >oracle > Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

作者:Paul Lin 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Paul Lin通过本文主要向大家介绍了oracle ntile,ntile,sql ntile,sqlserver ntile 用法,ntile函数等相关知识,希望本文的分享对您有所帮助

一、带空值的排列:

在前面《Oracle开发之分析函数(Rank、Dense_rank、row_number)》一文中,我们已经知道了如何为一批记录进行全排列、分组排列。假如被排列的数据中含有空值呢?

         sum(customer_sales) cust_sales,
         sum(sum(customer_sales)) over(partition by region_id) ran_total,
         rank() over(partition by region_id
                  order by sum(customer_sales) desc) rank
    from user_order
   group by region_id, customer_id;</div>

 REGION_ID CUSTOMER_ID CUST_SALES  RAN_TOTAL       RANK
---------- ----------- ---------- ---------- ----------
        10          31                    6238901          1
        10          26    1808949    6238901          2
        10          27    1322747    6238901          3
        10          30    1216858    6238901          4
        10          28     986964    6238901          5
        10          29     903383    6238901          6

我们看到这里有一条记录的CUST_TOTAL字段值为NULL,但居然排在第一名了!显然这不符合情理。所以我们重新调整完善一下我们的排名策略,看看下面的语句:

         sum(customer_sales) cust_total,
         sum(sum(customer_sales)) over(partition by region_id) reg_total,
         rank() over(partition by region_id 
                        order by sum(customer_sales) desc NULLS LAST) rank
        from user_order
       group by region_id, customer_id;</div>

 REGION_ID CUSTOMER_ID CUST_TOTAL  REG_TOTAL       RANK
---------- ----------- ---------- ---------- ----------
        10          26    1808949     6238901           1
        10          27    1322747    6238901           2
        10          30    1216858    6238901           3
        10          28     986964     6238901           4
        10          29     903383     6238901           5
        10          31     6238901                           6

绿色高亮处,NULLS LAST/FIRST告诉Oracle让空值排名最后后第一。

注意是NULLS,不是NULL。

二、Top/Bottom N查询:

在日常的工作生产中,我们经常碰到这样的查询:找出排名前5位的订单客户、找出排名前10位的销售人员等等。现在这个对我们来说已经是很简单的问题了。下面我们用一个实际的例子来演示:

【1】找出所有订单总额排名前3的大客户:

  from (select region_id,
               customer_id,
               sum(customer_sales) cust_total,
               rank() over(order by sum(customer_sales) desc NULLS LAST) rank
         from user_order
         group by region_id, customer_id)
  where rank <= 3;</div>

 REGION_ID CUSTOMER_ID CUST_TOTAL       RANK
---------- ----------- ---------- ----------
         9          25    2232703          1
         8          17    1944281          2
         7          14    1929774          3

SQL>

【2】找出每个区域订单总额排名前3的大客户:

    from (select region_id,
                 customer_id,
     

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

相关文章

  • 2017-05-11oracle清空所有表数据
  • 2017-05-11oracle while的用法示例分享
  • 2017-05-11Oracle中RAISE异常深入分析
  • 2017-05-11Oracle静态注册与动态注册详解
  • 2017-05-11oracle查询不含括号及不含指定字符的方法
  • 2017-05-11Oracle关于时间/日期的操作
  • 2017-05-11Oracle阻塞(blockingblocked)实例详解
  • 2017-05-11oracle与mysql的视频教程下载地址分享
  • 2017-05-11Oracle Translate 统计字符出现的次数示例代码
  • 2017-05-11Oracle 查询存储过程做横向报表的方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • oracle中的ash的采样机制
    • 数据库连接通过getcolumns()函数获取表字段信息
    • PL/SQL数据类型及操作符
    • Oracle把Blob内容导出到TXT中
    • Oracle 数组的学习 小知识也要积累,养成好的学习态度
    • oracle 查询表名以及表的列名
    • oracle 索引的相关介绍(创建、简介、技巧、怎样查看) .
    • oracle ORA-01114、ORA-27067错误解决方法
    • LINUX下Oracle数据导入导出的方法详解
    • [Oracle] 常用工具集之SQL*Loader的用法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有