由partition看窗口函数

最近要完成一个项目,有一个查询可难住了笔者,无论是子查询还是分组,都没弄出来, 还是基础知识不行啊。不过呢,可以查资料,最后用一个窗口函数解决了问题。由于开始的 数据库是Access,后来笔者导成SQL Server的,一下子明白了很多。

数据库类似是这个样子滴:

Employee表的字段:

empId,englishName,depId

Department表的字段:

depId,deptName

需求是:查找出Department表的所有字段,但是在前面显示出该部门的人数。

就是这样:

peopleCount    depId    deptName
25        1     人力资源部
42        2     市场营销部

一、分组的失败

首先说说分组的概念。根据关系数据库理论,分组的概念是(G,·,e ),其中G 是聚集,·是二目运算,e是G的一个成员,SELECT和GROUP BY的关系如下:

(一)当使用聚集函数(例如count),对于SELECT 列表中的项,如果没有把它当做聚集 函数的参数使用,必须是分组的一部分,例如有一个SQL语句:

SELECT depId
       ,count(*) as peopleCount
FROM Employee

那就必须在GROUP BY中出现deptId:

SELECT depId
       ,count(*) as peopleCount
FROM Employee
GROUP BY depId

但是窗口函数是例外的,不必(也不能)出现在Group BY子句中。

而对于可能更改分组(或者聚集函数返回值,例如新的列),则一定要包含在GROUP BY子 句之中。否则就会报错。

时间: 2024-11-03 11:41:29

由partition看窗口函数的相关文章

Oracle开发之窗口函数_oracle

一.窗口函数简介: 到目前为止,我们所学习的分析函数在计算/统计一段时间内的数据时特别有用,但是假如计算/统计需要随着遍历记录集的每一条记录而进行呢?举些例子来说: ①列出每月的订单总额以及全年的订单总额 ②列出每月的订单总额以及截至到当前月的订单总额 ③列出上个月.当月.下一月的订单总额以及全年的订单总额 ④列出每天的营业额及一周来的总营业额 ⑤列出每天的营业额及一周来每天的平均营业额 仔细回顾一下前面我们介绍到的分析函数,我们会发现这些需求和前面有一些不同:前面我们介绍的分析函数用于计算/统

SQL2005 学习笔记 窗口函数(OVER)_mssql2005

1.简介: SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数.移动平均值.以及执行其它计算. 窗口函数功能非常强大,使用起来也十分容易.可以使用这个技巧立即得到大量统计值. 窗口是用户指定的一组行. 开窗函数计算从窗口派生的结果集中各行的值. 2.适用范围: 排名开窗函数和聚合开窗函数. 也就是说窗口函数是结合排名开窗函数或者聚合开窗函数一起使用 OVER子句前面必须是排名函数或者是聚合函数 3.例题: 复制代码 代码如下: --建立订单表 c

深度探讨SQL Server 2005 窗口函数

SQL Server 2005中的窗口函数(window function)与微软Windows无关:相反,它们建立数据窗口.窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地恢复累计总数.移动平均值.以及执行其它计算. 一个SQL Server窗口是对函数应用的行的分区.你使用OVER(-)子句指定一个窗口,你可以对任何一个聚合函数应用这个子句.通常来说,你把数据分成几个组,但OVER()的自变量可选. USE AdventureWorks2;GOSELECT SalesOrderID

看紧你的3306端口,一次通过mysql的入侵

mysql 用superscan扫了一下某个c类的网段,寻找开放80端口的机器,结果就只有一台机器开放了80端口,试着连了一下,是我们学校某个社团的的主页.从端口的banner来看应该是apache(win32),证实一下telnet 211.87.xxx.xxxget(回车)<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>501 MethodNot

SQL Server窗口函数简介

简介 SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这 样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函数的概念. 什么是窗口函数 窗口函数,也可以被称为OLAP函数或分析函数.理解窗口函数可以从理解聚合函数开始,我们知道聚合函数的概念, 就是将某列多行中的值按照聚合规则合并为一行,比如说Sum.AVG等等,简单的概念如图1所示. 图1.聚合函数 因此,通常来说,聚合后的行数都要小于聚合前的行数.而对于窗口

partition manager导致资料丢失如何解决

[问题] 我用Partition Manager软件,想把E盘的系统格式更改为NTFS 操作提示失败 提示如图. 然后我打开我E盘的资料,发现资料基本都不见了-- 我看剩余的空间跟之前的又一样,这种情况如何恢复数据? [回答] 先说导致数据丢失的原因,以及我对调整分区的看法: PQ是个不稳定的软件,我们在数据恢复工作中经常遇到因PQ合并,拆分导致的数据故障.其原因我分析可能是:PQ毕竟是第三方的软件,对于文件系统的解释和MICROSOFT的解释还是不可能完全一致的(MICROSOFT像NTFS文

虚拟机分区对齐(Partition Alignment)问与答

Q: 什么是Partition Alignment(分区对齐)? A: 这主要指客户机OS的分区需要和存储设备的块对齐.具体来说就是分区起始偏移(PSO, Partition Starting Offset)应该是4096的倍数.Windows 2008.Vista和Win7全新安装后,Partition Starting Offset是1048576,已经是4096的倍数,因此无需调整.但是Windows XP,2000和2003的Partition Starting Offset是32256

深度探讨SQL Server 2005窗口函数

SQL Server 2005中的窗口函数(window function)与微软Windows无关:相反,它们建立数据窗口. 窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地恢复累计总数.移动平均值.以及执行 其它计算. 一个SQL Server窗口是对函数应用的行的分区.你使用OVER(-)子句指定一个窗口,你可以对 任何一个聚合函数应用这个子句.通常来说,你把数据分成几个组,但OVER()的自变量可选. USE AdventureWorks2; GO SELECT SalesOr

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.1 窗口函数的背景

1.1 窗口函数的背景 T-SQL性能调优秘笈--基于SQL Server 2012 窗口函数 在开始学习具体的窗口函数之前,先了解其背景和内涵,会对后续的学习有所帮助.本节先谈谈窗口函数的背景,解释基于集合方式和基于游标/迭代方式进行查询的不同,以及窗口函数如何对二者的差异进行弥补.最后,本节也提到了窗口函数的替代方法,以及为什么窗口函数会优于其替代方法.注意,尽管窗口函数能非常高效地解决很多问题,但在某些案例中,替代方法会好于窗口函数.第4章会具体谈论对窗口函数的优化,解释在什么情况下,计算