金典 SQL笔记(9)
page301-354其它解决方式 ---开窗函数
--測试数据及表
USE [NB]
GO
/****** 对象: Table [dbo].[T_Person2] 脚本日期: 08/14/2015 11:24:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[T_Person3] (
[FName] [varchar] (20) NULL,
[FCity] [varchar] (20) NULL,
[FAge] INT,
FSalary INT
) ON [PRIMARY] GO
SET ANSI_PADDING OFF INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Tom' ,'BeiJing', 20,3000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Tim' ,'ChengDu', 21,4000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Jim' ,'BeiJing', 22,3500 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Lily' ,'LonDon', 21,2000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('John' ,'NewYork', 22,1000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('YaoMing' ,'BeiJing', 20,3000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Swing' ,'LonDon', 22,2000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Guo' ,'NewYork', 20,2800 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('YuQian' ,'BeiJing', 24,8000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Ketty' ,'London', 25,8500 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Merry' ,'BeiJing', 23,3500 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Smith' ,'ChengDu', 30,3000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Bill' ,'BeiJing', 25,2000 ) INSERT INTO T_Person3(FName ,FCity, FAge,FSalary )
VALUES('Jerry' ,'NewYory', 24,3300 ) SELECT * FROM T_Person3
--与聚合函数一样,开窗函数也是对行集组进行聚合计算
--可是它不像普通聚合函数那样每组仅仅返回一个值 ,开窗函数能够
--为每组返回多个值,由于开窗函数所运行聚合计算的行集组是窗
--口ISO SQL 规定了这种函数为开窗函数 ,在oracle 中则被称为
--分析函数, 而在DB2中则被称为 OLAP函数
SELECT COUNT (*) FROM T_Person3 --以下俩个表达是一个意思
SELECT FCity, FAge,COUNT (*) OVER () FROM T_Person3 SELECT FCity, FAge,COUNT (*) FROM T_Person3
WHERE FSalary < 5000
GROUP BY FCity,FAge --OVERkeyword表示把函数当成开窗函数而不是聚合函数
--SQL标准同意将全部聚合函数用做开窗函数 ,使用OVER keyword来
--区分这俩种使用方法
--上面中count(*)over() 对于查询结果的每一行都返回全部符合
--条件的行的条数OVER()keyword后的括号里还常常加入选项 ,用以
--改变进行聚合运算的窗体范围假设 OVER()keyword后面的括号里的
--选项为空, 则开窗函数会对结果集中的全部行进行聚合运算 --partition by 子句
--开窗函数over() keyword后的括号里 ,能够使用partition by 子句
--来定义行的区分,从而进行聚合计算与 group by子句不同,
--partition by子句创建的分区是独立于结果集的 ,创建的分区仅仅是
--提供聚合计算的并且不同的开窗函数所创建的分区也互不影响
--范例以下SQL 用于显示每个人员的信息及所属城市的人员数
--同一个SQL 语句中能够使用多个开窗函数 ,并且这些开窗函数并不会
--相互干扰
--范例
SELECT FName, FCity, FAge , FSalary,
COUNT(*) OVER ( PARTITION BY FCity),
COUNT(*) OVER ( PARTITION BY FAge) FROM t_Person3 --with子句与子查询
--一次定义多次使用用于提取子查询
WITH
SSSS AS
(
SELECT FAge FROM T_person3 WHERE FAge <24
) SELECT * FROM T_person3 AS t WHERE T.FAge IN ( SELECT * FROM SSSS )
--374 with
cr as
(
select FAge from T_person3
) select * from T_person3 where FAge in ( select * from cr )
金典 SQL笔记(9)的更多相关文章
- 金典 SQL笔记(4)
由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了. watermark/2/te ...
- 金典 SQL笔记(2)
由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了.
- 金典 SQL笔记(6)
page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为 ...
- 金典 SQL笔记 SQL语句汇总
SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id) AS rowN,FNumber, FName,FSalary ,Fage FROM dbo ...
- SQL 笔记 By 华仔
-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据 ...
- SQL笔记 --- 数据库设计步骤(转)
SQL笔记 --- 数据库设计步骤 目录 总体设计过程需求分析概念结构设计逻辑结构设计数据库物理设计数据库实施数据库运行和维护 总体设计过程 0 » 下一篇:vim 命令集 posted @ 2012 ...
- 【程序员的SQL金典】笔记(第6章~第11章)
第六章 索引与约束 1.索引用来提高数据的检索速度,而约束则用来保证数据的完整性. 2.创建索引 创建索引的SQL 语句是CREATE INDEX,其语法如下: CREATE INDE ...
- 【程序员的SQL金典】笔记(第1章~第5章)
第一章数据库入门 1.概念: 数据库 表 列 记录(行) 主键 索引 第二章 数据表的创建和管理 1.数据库系统中的数据类型大致可以分为五类:整数.数值.字符相关.日期时间以及二进 ...
- SQL笔记1:SELECT及SELECT高级应用
T-SQL笔记1:SELECT及SELECT高级应用 本章摘要 1:安装AdventureWorks 2:基本运算符和表达式 3:between 4:like 5:escape 6:TOP 7:G ...
随机推荐
- GObject对象系统
http://www.ibm.com/developerworks/cn/linux/l-gobject/ 简单的说,GObject对象系统是一个建立在GLIB基础上的,用C语言完成的,具有跨平台特色 ...
- java中Runtime类
一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. 一般不能实例化一个Runtime对象, ...
- Unity3d网络游戏Socket通讯
http://blog.csdn.net/wu5101608/article/details/37999409
- c++中的对象复制
(1)this指针 this是一个隐含于每个类的成员函数的特殊指针,该指针是一个指向正在被某个成员函数操作的对象的指针. 当一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,也就是说,当 ...
- odoo8登录时,同帐号在其它客户端的连接自动退出
odoo跟大多数B/S系统一样,同一个帐号可以在不同的电脑上登录,并且可以同时操作,这样子会带来一些权限上的漏洞.为了解决这个问题,经过分析odoo的session处理机制,开发了一个模块,安装此模块 ...
- WebBrowser.ExecWB
CreateTime--2017年9月22日16:30:10 Author:Marydon js操作浏览器的ExecWB命令 一.准备工作: 以ie浏览器为例,需要更改IE安全级别为:" ...
- 【BIEE】MDS-01377:无法从使用 JNDI 名称 “jdbc/mds/owsm” 配置的数据源获取数据库连接
这是一次意外关机情况,BIEE环境是window server2008,但是一次意外情况,BIEE自动关机了,造成开启成功新启动BIEE产生如下错误: 错误产生后,倒腾了半天,并没发现什么问题,只是通 ...
- Visual studio之C# 利用Settings保存COM口配置信息
背景 利用C#做一个串口通信项目,客户需求保存串口COM口的配置信息,在此利用Settings来进行保存. 正文 ".Settings"的创建 点击项目 --> 添加新项 - ...
- ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
产生这个的原因可能是由于数据库突然停止,没有来得及将缓存区中的LOG归档,导致下次开启时不能匹配日志文件. 数据库中的三个日志文件挨个试,第二个就匹配上了
- Python-文件修改器
#-*- coding: utf-8 -*- import os import sys import glob from PyQt4.QtGui import * from PyQt4.QtCore ...