row number函数 oracle,ORACLE中的ROW_NUMBER函数

The ROW_NUMBER function assigns a unique number (sequentially, starting from 1, as defined by ORDER BY) to each row within the partition. It has the following syntax:

ROW_NUMBER ( ) OVER ( [query_partition_clause] order_by_clause )

Example 21-6 ROW_NUMBER

SELECT channel_desc, calendar_month_desc,

TO_CHAR(TRUNC(SUM(amount_sold), -5), '9,999,999,999') SALES$,

ROW_NUMBER() OVER (ORDER BY TRUNC(SUM(amount_sold), -6) DESC) AS ROW_NUMBER

FROM sales, products, customers, times, channels

WHERE sales.prod_id=products.prod_id AND sales.cust_id=customers.cust_id

AND sales.time_id=times.time_id AND sales.channel_id=channels.channel_id

AND times.calendar_month_desc IN ('2001-09', '2001-10')

GROUP BY channel_desc, calendar_month_desc;

CHANNEL_DESC         CALENDAR SALES$         ROW_NUMBER

-------------------- -------- -------------- ----------

Direct Sales         2001-09       1,100,000          1

Direct Sales         2001-10       1,000,000          2

Internet             2001-09         500,000          3

Internet             2001-10         700,000          4

Partners             2001-09         600,000          5

Partners             2001-10         600,000          6

Note that there are three pairs of tie values in these results. Like NTILE, ROW_NUMBER is a non-deterministic function, so each tied value could have its row number switched. To ensure deterministic results, you must order on a unique key. Inmost cases, that will require adding a new tie breaker column to the query and using it in the ORDER BY specification.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值