over()的用法
开窗函数over的常用方法
-- 1、为每条数据显示聚合信息
-- 2、为每条数据提供分组的聚合函数结果
-- 3、与排名函数一起使用
-- 1 为每条数据显示聚合信息
-- 准备一些数据
-- 该查询表只能用在SQL Server 2008中
select * from
(
values
(1, '张三', 100),
(2, '李四', 87),
(3, '赵钱', 95),
(4, '孙李', 88)
) as tbl(stuId, stuName, stuScore);
-- 将上数据作为临时数据,求平均值
select avg(stuScore) as avgScore from
(
values
(1, '张三', 100),
(2, '李四', 87),
(3, '赵钱', 95),
(4, '孙李', 88)
) as tbl(stuId, stuName, stuScore);
-- 得到平均分为92分,如果需要显示出所有学员成绩,并在每个学员成绩后面加上平均分
select *, avg(stuScore) as avgScore from
(
values
(1, '张三', 100),
(2, '李四', 87),
(3, '赵钱', 95),
(4, '孙李', 88)
) as tbl(stuId, stuName, stuScore);
-- 报错,因为聚合函数只有一行数据,而学生有4条数据,两者不统一
-- 使用开窗函数
-- 语法
-- 聚合函数 over() as 别名
-- 修改SQL语句
select *, avg(stuScore) over() as avgScore from
(
values
(1, '张三', 100),
(2, '李四', 87),
(3, '赵钱', 95),
(4, '孙李', 88)
) as tbl(stuId, stuName, stuScore);
-- 2 为每条数据提供分组的聚合函数结果
-- 依旧是这些数据,但是为每个学员添加一个组别,数据如下
select * from
(
values
(1, '张三', 100, '组长'),
(2, '李四', 87, '学干'),
(3, '赵钱', 95, '组长'),
(4, '孙李', 88, '学干')
) as tbl(stuId, stuName, stuScore, stuOtherName);
-- 希望平均分还要分开求,即总平均分和所有学干的平均分和所有组长的平均分分别显示
-- 可以使用
-- 聚合函数 over(partition by 字段) as 别名
-- 即
select *,
avg(stuScore) over() as 平均分,
avg(stuScore) over(partition by stuOtherName) as 分组平均分
from
(
values
(1, '张三', 100, '组长'),
(2, '李四', 87, '学干'),
(3, '赵钱', 95, '组长'),
(4, '孙李', 88, '学干')
) as tbl(stuId, stuName, stuScore, stuOtherName);
-- 3 与排名函数一起使用
-- 使用row_number()函数可以为数据生成一个自动增长的数字列
-- 使用
-- row_number() over(order by 字段) as 别名
-- 表示这个自动增长的列使用"字段"的排序规则添加
-- 例如按照分数添加序号
select
row_number() over(order by stuScore) as 序号,
*,
avg(stuScore) over() as 平均分,
avg(stuScore) over(partition by stuOtherName) as 分组平均分
from
(
values
(1, '张三', 100, '组长'),
(2, '李四', 87, '学干'),
(3, '赵钱', 95, '组长'),
(4, '孙李', 88, '学干')
) as tbl(stuId, stuName, stuScore, stuOtherName);
-- 按照姓名添加序号
select
row_number() over(order by stuName) as 序号,
*,
avg(stuScore) over() as 平均分,
avg(stuScore) over(partition by stuOtherName) as 分组平均分
from
(
values
(1, '张三', 100, '组长'),
(2, '李四', 87, '学干'),
(3, '赵钱', 95, '组长'),
(4, '孙李', 88, '学干')
) as tbl(stuId, stuName, stuScore, stuOtherName);
另一个例子
select * from
(select row_number() over(order by customerid asc) as rnumber,* from customers) as tbl
where tbl.rnumber between 15 and 20
over()的用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
随机推荐
- selenium实现淘宝的商品爬取
一.问题 本次利用selenium自动化测试,完成对淘宝的爬取,这样可以避免一些反爬的措施,也是一种爬虫常用的手段.本次实战的难点: 1.如何利用selenium绕过淘宝的登录界面 2.获取淘宝的页面 ...
- sock5协议转换http协议工具polipo使用笔记(Centos7)
一.安装 Shadowsocks使用socks5协议,而终端很多工具目前只支持http和https等协议,所以我们为终端设置Shadowsocks的思路就是将socks5协议转换成http协议,然后为 ...
- Configuration Error: deployment source 'SocietyManage:war exploded' is not valid
Configuration Error: deployment source 'SocietyManage:war exploded' is not valid 原因:没有下图的底下的红色框的内容.( ...
- Linux 第十二天
文件系统 1.分区类型 主分区:总共最多只能分四个 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个.但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用. 逻辑 ...
- input标签之外是否一定添加form标签
原文转载自:https://blog.csdn.net/lamanchas/article/details/78753031 input标签外是否添加form标签需要按情形区分:应用场景的区别:1.所 ...
- easy ui Uncaught Error: cannot call methods on tooltip prior to initialization; attempted to call method 'hide'
今天bootstrap 和easy ui混用时候报了这么一个错误,本来可以点击编辑的,但是现在一点击就报错,
- 20154305 齐帅 PC平台逆向破解
Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时 ...
- Lambda表达式where过滤数据
使用Lambda的表达式来过滤符合条件的数据.下面的代码实现,是把字符阵列中,把名字长度等于3元素找出来. class Bv { public void LambdaExpression() { st ...
- [git] 文件操作
文件操作 1. git add 1.1 将未被git管理的文件添加到暂存区 一次可添加多个文件 文件夹,中间用空格隔开 git add 文件/文件夹 文件/文件夹 再次执行 git sta ...
- 《JavaScript高级教程》学习笔记一、变量和数据类型
JavaScript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的. 一.变量和数据类型 1. 变量 JavaSript是弱类型语言,可以通过var定义任何类型变 ...