金典 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 )
时间: 2024-09-30 11:28:13

金典 SQL笔记(9)的相关文章

金典 SQL笔记(6)

page223-索引 --利用SQL 语句创建索引 --CREATE INDEX 索引名称on 表名(字段 ,字段, 字段字段n) --索引名称必须为唯一的,字段 ,字段, 同意一个到多个 --范例为T_person 表中给FName创建索引索引名为 idx_person_name CREATE INDEX idx_person_name ON T_Person (FName) --删除索引 --drop index 表名索引名 DROP INDEX T_person.idx_person_na

金典 SQL笔记(3)

由于在本地笔记上写的.CSDN markdown编辑器仅仅支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了.

金典 SQL笔记(8)

------------------------文本方便拷贝------------------------ page269-301子查询 --子查询 --SQL允许将一个查询语句作为一个结果集供其他 SQL语句使用, 就像使用 --普通的表一样,被当做结果集的查询语句被称为子查询 --所有可以使用表的地方都可以使用子查询 ,比如select * from T --上面的T 就可以用子查询来代替 select * from (select * from T2 where --age >= 30)

金典 SQL笔记(1)

page(1-75) 主键最好是无意义的字段便于以后扩展. PS:假设以标书编码为主键,以后标书编码填错需要改的时候,关联表都需要跟着改.如果是一个无意义的自增字段是主键就无此原因. 主键最好不要设置为联合主键,否则降低效率,不利于扩展 PS:原文[联合主键可以解决表中没有唯一主键的问题,不过联合主键有如下缺点:] 1.效率低.在进行数据的添加.删除.查找及更新的时候,数据库系统必须处理俩个字段,这样大大降低了数据的处理速度. 2.使数据库的结构设计变得槽糕.组成联合主键的字段通常都是有业务含义

金典 SQL笔记 SQL语句汇总

SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id) AS rowN,FNumber, FName,FSalary ,Fage FROM dbo. T_Employee) AS a WHERE a. rowN >=3 AND a. rowN <=5 SELECT distinct CREATEDate,state FROM dbo .TwodimensionalcodeHistory SELECT * FROM Twodimensiona

金典 SQL笔记(2)

因为在本地笔记上写的.CSDN markdown编辑器只支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了. 版权声明:本文为博主原创文章,未经博主允许不得转载.

金典 SQL笔记(4)

因为在本地笔记上写的.CSDN markdown编辑器只支持.md格式导入, 图片没办法直接导进去.写的多了懒的一张一张图片切图上传; 直接整个文章切成图片上传上去了. 版权声明:本文为博主原创文章,未经博主允许不得转载.

金典 SQL笔记(7)

附上文本方便拷贝 page247-表连接269 --表连接 --建表及测试数据 --T_Customer 客户信息表 --T_OrderType 订单类型 --T_Order 订单信息 CREATE TABLE T_Customer(Fid INT NOT NULL,FName VARCHAR(20 ) NOT NULL, Fage INT, PRIMARY KEY (Fid)) CREATE TABLE T_Order(Fid INT NOT NULL,FNumber VARCHAR(20 )

金典 SQL笔记(5)

版权声明:本文为博主原创文章,未经博主允许不得转载.