博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql ROW_NUMBER() 排序函数
阅读量:6733 次
发布时间:2019-06-25

本文共 1831 字,大约阅读时间需要 6 分钟。

1使用row_number()函数进行编号:如

ExpandedBlockStart.gif
View Code
1 
select email,customerID, ROW_NUMBER() over(order by psd) 
as
 rows from QT_Customer

 原理:先按psd进行排序,排序完后,给每条数据进行编号。

 

2.在订单中按价格的升序进行排序,并给每条记录进行排序

代码如下:

ExpandedBlockStart.gif
View Code
1 
select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) 
as
 rows from OP_Order

 

 

3.统计出每一个各户的所有订单并按每一个客户下的订单的金额 升序排序,同时给每一个客户的订单进行编号。这样就知道每个客户下几单了。

 如图:

 

代码如下:

ExpandedBlockStart.gif
View Code
1 
select ROW_NUMBER() over(partition by customerID  order by totalPrice) 
as
 rows,customerID,totalPrice, DID from OP_Order

 

 4.统计每一个客户最近下的订单是第几次下的订单。

 

 

代码如下:

ExpandedBlockStart.gif
View Code
1 
with tabs 
as
2 
(
3 
select ROW_NUMBER() over(partition by customerID  order by totalPrice) 
as
 rows,customerID,totalPrice, DID from OP_Order
4 
)
5 
6 
select MAX(rows) 
as
 
'
下单次数
'
,customerID from tabs group by customerID

 

 5.统计每一个客户所有的订单中购买的金额最小,而且并统计改订单中,客户是第几次购买的。

如图:

 

上图:rows表示客户是第几次购买。

 

思路:利用临时表来执行这一操作

 1.先按客户进行分组,然后按客户的下单的时间进行排序,并进行编号。

 2.然后利用子查询查找出每一个客户购买时的最小价格。

 3.根据查找出每一个客户的最小价格来查找相应的记录。

 

代码如下:

ExpandedBlockStart.gif
View Code
1 
with tabs 
as
2 
(
3 
select ROW_NUMBER() over(partition by customerID  order by insDT) 
as
 rows,customerID,totalPrice, DID from OP_Order
4 
)
5 
select 
*
 from tabs
6 
 
where
 totalPrice 
in
 
7 
           (
8 
           select MIN(totalPrice)from tabs group by customerID
9 
           )

 

 5.筛选出客户第一次下的订单。

 

思路。利用rows=1来查询客户第一次下的订单记录。

 

代码如下:

ExpandedBlockStart.gif
View Code
1 
with tabs 
as
2 
(
3 
select ROW_NUMBER() over(partition by customerID  order by insDT) 
as
 rows,
*
 from OP_Order
4 
)
5 
select 
*
 from tabs 
where
 rows 
=
 
1
6 
  
7 
select 
*
 from OP_Order

 

 6.rows_number()可用于分页

 思路:先把所有的产品筛选出来,然后对这些产品进行编号。然后在where子句中进行过滤。

 

 7.注意:在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行。

            如下代码:

ExpandedBlockStart.gif
View Code
1 
 select 
2 
 ROW_NUMBER() over(partition by customerID  order by insDT) 
as
 rows,
3 
 customerID,totalPrice, DID
4 
  from OP_Order 
where
 insDT
>
'
2011-07-22
'

   以上代码是先执行where子句,执行完后,再给每一条记录进行编号。

 

 

 

参考文献:

           :

 

 

 

转载于:https://www.cnblogs.com/85538649/archive/2011/08/13/2137277.html

你可能感兴趣的文章
Spring中@Async用法总结
查看>>
Spring data 如何定义默认时间与日期
查看>>
php 重置数组索引,兼容多维数组
查看>>
ARC 之内存转换
查看>>
输入密码与确认密码的匹配提示
查看>>
POI获取JXL生成的Excel带公式Cell返回空
查看>>
互联网项目经理工作到底是一种什么样的体验?
查看>>
php header 头输出 不同文档
查看>>
WIN7开发无法通过IP(127.0.0.1/10.4.250.107)而只能通过localh...
查看>>
Folding Views
查看>>
Android Camera2 使用总结
查看>>
android中menu的使用
查看>>
#!/usr/bin/env python与#!/usr/bin/python的区别
查看>>
11 个让你吃惊的 Linux 终端命令
查看>>
刚了解到的Lombok,记一下
查看>>
log4j.properties配置文件
查看>>
Shine OpenCart 自适应 多用途主题模板 ABC-0021
查看>>
JSP基本语法
查看>>
去掉eclipse的拼写检查
查看>>
携程当机,我该吐槽谁?
查看>>