Teradata 的rank() 和 row_number() 函数

Teradata数据库中也有和oracle类似的分析函数,功能基本一样。示例如下:

  • RANK() 函数

 


SELECT * FROM salestbl ORDER BY 1,2;

storeid     prodid      sales----------- -------	---------1001 	    A 		100000.00		1001 	    C 		60000.00		1001 	    D 		35000.00		1001 	    F 		150000.00		1002 	    A 		40000.00		1002 	    C 		35000.00		1002 	    D 		25000.00		1003 	    A 		30000.00		1003 	    B 		65000.00		1003 	    C 		20000.00		1003 	    D 		50000.00	

按sales排序,找出top 3的记录。


SELECT storeid, prodid, sales, RANK() OVER (ORDER BY sales DESC) AS Rank_Sales
FROM salestbl
QUALIFY rank_sales <= 3;

    storeid  prodid        sales   Rank_Sales-----------  ------  -----------  -----------       1001  F         150000.00            1       1001  A         100000.00            2       1003  B          65000.00            3

rank() over (partition by ... order by ... )用法

按storeid分组,然后在每个storeid内对sales降序排序。

SELECT storeid, prodid, sales, RANK()
OVER (PARTITION BY storeid ORDER BY sales DESC)AS Rank_Sales
FROM salestbl
QUALIFY Rank_Sales <= 3
;

storeid       prodid    sales          Rank_Sales-------       -------   ---------      ---------1001          F         150000         11001          A         100000         21001          C         60000          31002          A         40000          11002          C         35000          21002          D         25000          31003          B         65000          11003          D         50000          21003          A         30000          3

找出销售额top3的prodid。


SELECT Prodid, Sumsales, RANK( ) OVER (ORDER BY Sumsales DESC) AS "Ranking"
FROM (SELECT prodid, SUM(sales)
      FROM salestbl
      GROUP BY 1) AS dt(Prodid, Sumsales)
QUALIFY Ranking <= 3;

Prodid     Sumsales      Ranking------  -----------  -----------A         170000.00            1F         150000.00            2C         115000.00            3

用rank() 按sales降序排序,如果sales相同,则排名相同。


SELECT itemid, salesdate, sales, RANK() OVER (ORDER BY sales DESC)
WHERE salesdate BETWEEN DATE ‘2004-01-01‘ AND DATE ‘2004-03-01‘

AND itemid = 10
FROM daily_sales_2004;

     itemid   salesdate        sales  Rank(sales)-----------  ----------  -----------  -----------         10  2004-01-10       550.00            1         10  2004-02-17       550.00            1         10  2004-02-20       450.00            3         10  2004-02-06       350.00            4         10  2004-02-27       350.00            4         10  2004-01-05       350.00            4         10  2004-01-03       250.00            7         10  2004-02-03       250.00            7         10  2004-01-25       200.00            9         10  2004-01-02       200.00            9         10  2004-01-21       150.00           11         10  2004-02-01       150.00           11         10  2004-01-01       150.00           11         10  2004-01-31       100.00           14
  • ROW_NUMBER () 函数

用row_number() 按sales降序排序时,即使sales相同,排名也不同。


SELECT itemid, salesdate, sales, ROW_NUMBER() OVER (ORDER BY sales DESC)
WHERE salesdate BETWEEN DATE ‘2004-01-01‘ AND DATE ‘2004-03-01‘
AND itemid = 10

FROM daily_sales_2004;

     itemid   salesdate        sales  Row_Number()-----------  ----------  -----------  ------------         10  2004-01-10       550.00             1         10  2004-02-17       550.00             2         10  2004-02-20       450.00             3         10  2004-02-06       350.00             4         10  2004-02-27       350.00             5         10  2004-01-05       350.00             6         10  2004-01-03       250.00             7         10  2004-02-03       250.00             8         10  2004-01-25       200.00             9         10  2004-01-02       200.00            10         10  2004-01-21       150.00            11         10  2004-02-01       150.00            12         10  2004-01-01       150.00            13         10  2004-01-31       100.00            14

Teradata 的rank() 和 row_number() 函数

时间: 2024-11-05 01:39:35

Teradata 的rank() 和 row_number() 函数的相关文章

[转]oracle分析函数Rank, Dense_rank, row_number

oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 =============================================== 1.使用rownum为记录排名 2.使用分析函数来为记录排名 3.使用分析函数为记录进行分组排名 一.使用rownum为记录排名: 在前面一篇<Oracle开发专题之:分析函数>,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题:

oracle分析函数Rank, Dense_rank, row_number

http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录===============================================1.使用rownum为记录排名2.使用分析函数来为记录排名3.使用分析函数为记录进行分组排名 一.使用rownum为记录排名:在前面一篇<Oracle开发专题之:分析函数>,我们认识了分析函数的基本应用,现在我们再来考虑下面几个问题: ①对所有客户按订单总额进行排名

SQL Server数据库ROW_NUMBER()函数使用

下面以几个实例来说明ROW_NUMBER()函数的使用. 实例如下: 1.使用row_number()函数进行编号,如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer 原理:先按psd进行排序,排序完后,给每条数据进行编号. 2.在订单中按价格的升序进行排序,并给每条记录进行排序代码如下: select DID,customerID,totalPrice,ROW_NUMBER() 

SQL Server数据库ROW_NUMBER()函数使用详解

SQL Server数据库ROW_NUMBER()函数使用详解 摘自:http://database.51cto.com/art/201108/283399.htm SQL Server数据库ROW_NUMBER()函数的使用是本文我们要介绍的内容,接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用. 实例如下: 1.使用row_number()函数进行编号,如 select email,customerID, ROW_NUMBER() over(order by psd) a

T-SQL利用Row_Number函数实现分页

SQL: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE PROCEDURE PagingViewTest (    @currentPageIndex INT, --页序号    @pageSize INT, --页大小    @pageCount INT OUTPUT  --返回值,总记录数 ) AS BEGIN<br>--取总记录数 SELECT @pageCount=COUNT(OrderID) FROM dbo.sal

MySQL中ROW_NUMBER()函数的替换实现

SELECT t.*, @RowNum := @RowNum + 1 AS RowNum FROM t, (SELECT @RowNum := 0) AS myRows MySQL中没有ROW_NUMBER()函数,可以用以上代码替换. MySQL中ROW_NUMBER()函数的替换实现

SQL Server数据库partition by 与ROW_NUMBER()函数使用详解[转]

关于SQL的partition by 字段的一些用法心得 先看例子: if object_id('TESTDB') is not null drop table TESTDB create table TESTDB(A varchar(8), B varchar(8)) insert into TESTDB select 'A1', 'B1' union all select 'A1', 'B2' union all select 'A1', 'B3' union all select 'A2'

row_number函数的使用

转 row_number函数的使用 SQL Server数据库ROW_NUMBER()函数的使用是本文我们要介绍的内容,接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用. 实例如下: 1.使用row_number()函数进行编号,如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer 原理:先按psd进行排序,排序完后,给每条数据进行编号. 2.在订单中按价格的升序

曲演杂坛--蛋疼的ROW_NUMBER函数

使用ROW_NUMBER来分页几乎是家喻户晓的东东了,而且这东西简单易用,简直就是程序员居家必备之杀器,然而ROW_NUMBER也不是一招吃遍天下鲜的无敌BUG般存在,最近就遇到几个小问题,拿出来供大家娱乐下. ---====================================================== 问题1:为什么加WHERE条件就慢,不加反而快? 查询SQL: WITH Temp AS( SELECT * , ROW_NUMBER()OVER(ORDER BY T2.