SQL高级应用

本文详细介绍了SQL中的窗口函数,包括row_number、rank、dense_rank及ntile等。这些函数广泛应用于数据分析场景,如生成行号、计算排名以及进行分组统计等。通过具体的示例说明了如何使用这些函数,并解释了它们之间的区别。

追加:row_number, rank, dese_rank, ntile

1. row_number: 为查询出来的每一行记录生成一个序号。

SELECT row_number() OVER(ORDER BY field) AS row_n

FROM tablename;

分页查询:

with t_towtable

as (select row_number over(order by field1) as row_number from tb)

select * from t_rowtable where row_number > 1 and row_number > 4 order by field1;

 

ROW_NUMBER() OVER([<partition_by_caluse>] <order_by_clause>);

 

2. rank: 返回结果集的分区内每行的排名:

RANK() OVER([<partition_by_caluse_按照某个字段分区>]<order_by_clause_排序>);

Examples:

WITH CustomerSum AS

(SELECT CustomerID, SUM(totalDue) AS total

  FROM sales GROUP BY CustomerID)

SELECT * RANK() OVER (ORDER BY total DESC) AS RANK

FROM CustomerSum

 

3. dense_rank: 顺序排序(生成的序号是连续的)。

 

4. ntile:取前多少个名次的排名的行。

SELECT SalesID, NTILE(1000) OVER(ORDER BY CustomerID) AS NTile

FROM Sales

桶数的计算:

if(记录数%桶数 == 0)

      每桶记录数都为记数总数/桶数

else

      recordCount1 = total/tongNum + 1;

      int n = 1;

      m = recordCont1*n;

while((total - m) % (tongNum - n)) != 0)

{

      n++;

      m = recordCount1 * n;

}

recordCount2 = (total - m) / (tongNum - n);

将前n个桶记录设置为recordCount1

将n+1个到后面所有桶记为recordCount2

转载于:https://www.cnblogs.com/garinzhang/archive/2010/05/04/3639474.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值