关于SQL的over partition by 开窗语句在分页和统计中的使用总
CREATE TABLE OrderInfo(
ID INT IDENTITY(1,1) PRIMARY KEY,
CustomerID INT NULL,
TotalMoney DECIMAL(18,2) NULL,
OrderStatus TINYINT NULL DEFAULT 0,
CreateTime DATETIME DEFAULT GETDATE() NOT NULL
)
INSERT INTO OrderInfo
(
CustomerID,
TotalMoney,
OrderStatus,
CreateTime
)
SELECT 1,100,1,'2015-03-21' UNION ALL
SELECT 2,50,1,'2015-03-22' UNION ALL
SELECT 1,300,1,'2015-03-23' UNION ALL
SELECT 3,1000,3,'2015-03-24' UNION ALL
SELECT 2,20,1,'2015-03-24' UNION ALL
SELECT 5,50,4,'2015-03-20' UNION ALL
SELECT 8,600,2,'2015-03-21' UNION ALL
SELECT 6,80,1,'2015-03-22' UNION ALL
SELECT 2,70,1,'2015-03-23' UNION ALL
SELECT 1,40,0,'2015-03-23' UNION ALL
SELECT 9,20,1,'2015-03-20' UNION ALL
SELECT 10,100,1,'2015-03-21' UNION ALL
SELECT 6,99,1,'2015-03-24' UNION ALL
SELECT 4,78,2,'2015-03-25' UNION ALL
SELECT 2,100,1,'2015-03-24'
/*
找出每个顾客第一次下单的时间及金额
*/
with cte as(
select *,ROW_NUMBER() over(partition by customerid order by createtime) rm from OrderInfo
)
select * from cte where rm=1 --select CustomerID,min(CreateTime) from OrderInfo group by CustomerID
/*
找出每个顾客金额最大的订单金额
*/
with cte as(
select *,ROW_NUMBER() over(partition by customerid order by totalmoney desc) rm from OrderInfo
)
select * from cte where rm=1 ---select CustomerID,max(TotalMoney) from OrderInfo group by CustomerID
/*
统计每一个客户最近下的订单是第几次下的订单
*/
with cte as
(
select *,ROW_NUMBER() over(partition by customerid order by createtime) rm from OrderInfo
)select CustomerID,max(rm) from cte
group by CustomerID ---select CustomerID,count(CustomerID) from OrderInfo group by CustomerID
/*
统计所有客户第3次下单订单信息
*/
;with cte as(
select *,ROW_NUMBER() over(partition by customerid order by createtime) rm from OrderInfo
)
select * from cte where rm=3
/*
统计每一个客户所有订单金额的平均值
*/
select *,avg(TotalMoney) over(partition by customerid) rm from OrderInfo
/*
在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行。
*/
SELECT CustomerID,CreateTime,ROW_NUMBER() OVER (PARTITION BY customerID ORDER BY CreateTime) AS num
FROM OrderInfo
WHERE CustomerID>2
关于SQL的over partition by 开窗语句在分页和统计中的使用总的更多相关文章
- SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一 ...
- sql已经在视图展示的语句如何显示别的表中的内容而不改变原有的值
1.这个功能是我在公司的时候的一个需求,我师傅和我说你不可能就是说你可以添加的时候是数字但是展现给客户看的时候是数字最好是名称因为客户不知道这是什么意思 2.于是我陷入了漫长的实现这个功能中一开始只是 ...
- SQL服务器在执行这条语句时会先进行运算然后执行
1.打开地址,我们可以看到是一个正常的页面. 2..然后在地址后面加上-1,变成:http://site/news.asp?id=123-1,若返回的页面和前面不同,是另一个正常的页面,则表示存在注入 ...
- PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)
PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...
- 浅谈sql 、linq、lambda 查询语句的区别
浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...
- (转载)sql语句解决分页问题
<来源网址:http://www.delphifans.com/infoview/Article_353.html>sql语句解决分页问题日期:2005年1月17日 作者:treemon2 ...
- SQL数据库增删改查基本语句
adoquery1.Fielddefs[1].Name; 字段名dbgrid1.columns[0].width:=10; dbgrid的字段宽度adoquery1.Fields[i].DataTyp ...
- 利用SQL语句实现分页
1.概述 在网页中如果显示的数据太多就会占据过多的页面,而且显示速度也会很慢.为了控制每次在页面上显示数据的数量,就可以利用分页来显示数据. 2.技术要点 在SQL Server中要实现SQL分页,需 ...
- SQL点滴1—SET QUOTED_IDENTIFIER OFF语句的作用
原文:SQL点滴1-SET QUOTED_IDENTIFIER OFF语句的作用 先看下面几个sql语句 代码 SELECT * FROM [USER] WHERE a= 'netasp' ...
随机推荐
- Java 多个文件压缩下载
有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...
- django基于中间件的IP访问频率控制
一.中间件的代码 注意:成功时返回的是None,那样才会走视图层,返回httpresponse就直接出去了 import time from django.utils.deprecation impo ...
- Luogu P3355 骑士共存问题
题目链接 \(Click\) \(Here\) 二分图最大独立集.对任意两个可以相互攻击的点,我们可以选其中一个.对于不会互相攻击的,可以全部选中.所以我们只需要求出最大匹配,根据定理,二分图最大独立 ...
- 5.django学习模型
##Django Models ##编写models 1.在应用根目录下创建models.py并引入models模块,创建类,继承models.Model该类即是一张数据表 2.字段创建 ##映射数据 ...
- Vue computed属性
computed vs methods 我们可以使用Vue中的method计算出学科的总分,最终得到的总数结果是相同的. 在上例的基础上,我们把computed区块中的totalMarks函数整体移到 ...
- GO 中输出打印的常用函数
1.Println 可以打印字符串和变量(任何类型) println函数在输出后自动增加一个换行 例: a:=10 b:=“string” fmt.Println(a) //right fmt ...
- Linux安装npm并打包前端代码
查看node版本$ node -v查看npm版本$ npm -v如果没有安装node及npm,需要先安装node及npm#yum install node# yum install npm安装cnpm ...
- JAVA核心技术I---JAVA基础知识
一:class类 (一)文件规则 1.Java文件必须以.java作为扩展名 2.一个Java文件只能有一个public class 3.public class的名字必须和文件名字一样,大小写都要完 ...
- python 面向对象(一)初识面向对象
##################################总结#################### 1. 面向过程:一切以事物的发展流程为中心 面向对象:一切以对象为中心,一切皆为对向, ...
- eclipse将javaSE项目导出成可执行jar包
将第三方包和项目打包到一块 step1:选中要导出的项目,右键选择Export step2:选择java/Runable JAR file step3:选择main主程序,选择第三方包打包的形式,推荐 ...