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 开窗语句在分页和统计中的使用总的更多相关文章

  1. SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用

    由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一 ...

  2. sql已经在视图展示的语句如何显示别的表中的内容而不改变原有的值

    1.这个功能是我在公司的时候的一个需求,我师傅和我说你不可能就是说你可以添加的时候是数字但是展现给客户看的时候是数字最好是名称因为客户不知道这是什么意思 2.于是我陷入了漫长的实现这个功能中一开始只是 ...

  3. SQL服务器在执行这条语句时会先进行运算然后执行

    1.打开地址,我们可以看到是一个正常的页面. 2..然后在地址后面加上-1,变成:http://site/news.asp?id=123-1,若返回的页面和前面不同,是另一个正常的页面,则表示存在注入 ...

  4. PL/SQL中批量执行SQL脚本(不可把所有的语句都复制到New SQL Windows)

    PL/SQL中批量执行SQL脚本,不可把所有的语句都复制到New SQL Window,因为这样会导致缓冲区过大而进程卡死! 最好的办法是将要执行的SQL脚本存放到指定文件中,如C:\insert.s ...

  5. 浅谈sql 、linq、lambda 查询语句的区别

    浅谈sql .linq.lambda 查询语句的区别 LINQ的书写格式如下: from 临时变量 in 集合对象或数据库对象 where 条件表达式 [order by条件] select 临时变量 ...

  6. (转载)sql语句解决分页问题

    <来源网址:http://www.delphifans.com/infoview/Article_353.html>sql语句解决分页问题日期:2005年1月17日 作者:treemon2 ...

  7. SQL数据库增删改查基本语句

    adoquery1.Fielddefs[1].Name; 字段名dbgrid1.columns[0].width:=10; dbgrid的字段宽度adoquery1.Fields[i].DataTyp ...

  8. 利用SQL语句实现分页

    1.概述 在网页中如果显示的数据太多就会占据过多的页面,而且显示速度也会很慢.为了控制每次在页面上显示数据的数量,就可以利用分页来显示数据. 2.技术要点 在SQL Server中要实现SQL分页,需 ...

  9. SQL点滴1—SET QUOTED_IDENTIFIER OFF语句的作用

    原文:SQL点滴1-SET QUOTED_IDENTIFIER OFF语句的作用 先看下面几个sql语句 代码   SELECT * FROM [USER]    WHERE a= 'netasp' ...

随机推荐

  1. 使用selenium 模拟人操作请求网页

    首先要 pip install selenium  安装插件 然后要下载驱动驱动根据你的浏览器 Chrome  selenium 驱动下载地址 http://chromedriver.storage. ...

  2. python 类的介绍

    使用面向对象的优点: 1.能够更好的设计软件架构 2.维护软件模块 3.易于架构和组件的重用 类的定义: 构造函数:初始化用,写不写都可以,默认为空 类属性:属于类的对象 方法属性:不属于类的对象 私 ...

  3. python爬虫获取图片

    import re import os import urllib #根据给定的网址来获取网页详细信息,得到的html就是网页的源代码 def getHtml(url): page = urllib. ...

  4. Prometheus+AlertManager实现邮件报警

    AlertManager下载 https://prometheus.io/download/ 解压 添加配置文件test.yml,配置收发邮件邮箱 参考配置: global: smtp_smartho ...

  5. 洛谷P2770 双路DP // 网络流

    https://www.luogu.org/problemnew/show/P2770 第一眼看过去,觉得这不是一个经典的双路DP模型吗,将一条过去一条回来互不相交的路径看作是起点出发了两条路径一起走 ...

  6. CodeForces621E 快速矩阵幂优化dp

    有时些候在用快速矩阵幂优化dp的时候,它的矩阵乘法是不那么容易被具体为题目背景的意思的,大多数时候难以理解矩阵之间相乘的实际意义,正如有时候我们不知道现在在做手头这些事情的意义,但倘若是因一个目标而去 ...

  7. jenkins配置小结

    启动jenkins:javaw -jar -Dhudson.model.DirectoryBrowserSupport.CSP= jenkins.war --httpPort=8001 wget  h ...

  8. 极光推送API

    https://github.com/jpush/jpush-api-ruby-client/blob/master/docs/Guides.md#%E6%9B%B4%E6%96%B0%E8%AE%B ...

  9. Git(介绍和安装)

    Git 是什么 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统. 与常用的版本控制工具 CVS, Subversion 等不同,它 ...

  10. stat/lstat函数使用

    1. 进程虚拟地址空间 2. stat函数 获取文件信息 #include <sys/types.h> #include <sys/stat.h> #include <u ...