你真的会玩SQL吗?系列目录

你真的会玩SQL吗?之逻辑查询处理阶段

你真的会玩SQL吗?和平大使 内连接、外连接

你真的会玩SQL吗?三范式、数据完整性

你真的会玩SQL吗?查询指定节点及其所有父节点的方法

你真的会玩SQL吗?让人晕头转向的三值逻辑

你真的会玩SQL吗?EXISTS和IN之间的区别

你真的会玩SQL吗?无处不在的子查询

你真的会玩SQL吗?Case也疯狂

你真的会玩SQL吗?表表达式,排名函数

你真的会玩SQL吗?简单的 数据修改

你真的会玩SQL吗?你所不知道的 数据聚合

你真的会玩SQL吗?透视转换的艺术

你真的会玩SQL吗?冷落的Top和Apply

你真的会玩SQL吗?实用函数方法汇总

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

本章的内容与 你真的会玩SQL吗?透视转换内容 非常重要,非常重要,非常重要 ,不理解的可以慢慢看,回头看,过几天再看,以后很多思想需要以此为基础而演变。

此后用到的用例数据库是SQL2008里面的,若看过本系列之前的文章,创建过基础样例数据库就不用再创建。

若没有创建过的,用例数据库文件:链接:http://pan.baidu.com/s/1qW1QxA0 密码:dqxx

连续聚合

下面的例子将使用一个EmpOrdersr汇总表,每位雇员在每个月占一行,包含该雇员在一个月内处理过的订单数量,运行下代码创建数据:

CREATE TABLE EmpOrders(empid INT NOT NULL ,ordmonth DATE NOT NULL ,--只取到月份2015-07-07qty INT NOT NULL ,PRIMARY KEY ( empid, ordmonth ))
go
INSERT  INTO EmpOrders( empid ,ordmonth ,qty )SELECT  o.empid ,DATEADD(MONTH, DATEDIFF(MONTH, 0, o.orderdate), 0) AS ordmonth ,SUM(qty) AS qtyFROM    Sales.Orders AS oJOIN Sales.OrderDetails AS od ON o.orderid = od.orderidGROUP BY empid ,DATEADD(MONTH, DATEDIFF(MONTH, 0, o.orderdate), 0)

查询:

SELECT  empid ,ordmonth ,qty
FROM    EmpOrders
ORDER BY empid ,ordmonth

将输出以下内容

接下来讲讲各类聚合……

1.累积聚合

为每个雇员和每个月,返回从其开始有订单操作以来到该月份处理过的订单总量和每月的平均量,结果如下,怎么做?

SELECT  o1.empid ,o1.ordmonth ,o1.qty AS qtythismonth ,SUM(o2.qty) AS totalqty ,CAST(AVG(1. * o2.qty) AS NUMERIC(12, 2)) AS avgqty
FROM    EmpOrders AS o1JOIN EmpOrders AS o2 ON o2.empid = o1.empidAND o2.ordmonth <= o1.ordmonth
GROUP BY o1.empid ,o1.ordmonth ,o1.qty
ORDER BY o1.empid ,o1.ordmonth

若想得到雇员达到累积总量<1000之前的每月聚合值,怎么做?

SELECT  o1.empid ,o1.ordmonth ,o1.qty AS qtythismonth ,SUM(o2.qty) AS totalqty ,CAST(AVG(1. * o2.qty) AS NUMERIC(12, 2)) AS avgqty
FROM    EmpOrders AS o1JOIN EmpOrders AS o2 ON o2.empid = o1.empidAND o2.ordmonth <= o1.ordmonth
GROUP BY o1.empid ,o1.ordmonth ,o1.qtyHAVING SUM(o2.qty)<1000
ORDER BY o1.empid ,o1.ordmonth

对总量做一次HAVING过滤 HAVING SUM(o2.qty)<1000,而不是用WHERE,因为过滤是的聚合,而不是属性。  

2.滑动聚合

滑动聚合是对序列内的一个滑动窗口进行的聚合计算,而不是从序列的开始计算到当前位置。

求雇员最近三个月(包括本月)的平均订单量(移动平均数),得到以下结果:

 View Code

这里使用的是o2.ordmonth> 3个月之前的月份 and o2.ordmonth<=o1.当前月份

3.年初至今

聚合按年单位算,如求每个雇员每年内的每个月份的聚合,该怎样写?结果如下:

 View Code

所有聚合函数都会忽略NULL值,只有一个例外:Count(*)

聚合中常见的函数为分组函数GROUP BY ,要注意的是 GROUP BY 原则 select后面所有列中 没有使用聚合函数的列必须出现在GROUP BY 后面

本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/4915127.html如需转载请自行联系原作者

欢醉

你真的会玩SQL吗?你所不知道的 数据聚合相关推荐

  1. 你真的会玩SQL吗?简单的数据修改

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  2. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  3. 你真的会玩SQL吗?和平大使 内连接、外连接

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. 你真的会玩SQL吗?Case也疯狂

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  6. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(下)

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  7. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    转http://www.cnblogs.com/zhijianliutang/p/4100103.html 前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的 ...

  8. MySQL还能这样玩---第一篇之你所不知道的命令

    MySQL还能这样玩---第一篇之你所不知道的命令 命令篇 DDL---表定义相关命令操作 show create table 表名 ---查看创建表的SQL语句 alter table 表名 mod ...

  9. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 参考文章: (1)你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 ( ...

最新文章

  1. 养成好的生活和学习习惯
  2. 【 Linux 】记录下第一次使linux系统遇到的问题(系统安装、配置查看、搜狗输入法安装)
  3. 在c++使用文件流(初学者必看)
  4. python3 链表_python3实现链表
  5. nssl1176-轨道【数论,Dp】
  6. 【POJ - 3259 】Wormholes(Bellman_Ford或spfa算法,判断有向图中是否存在负环)
  7. uboot主循环main_loop
  8. 力扣438.找到字符串中所有字母异位词(JavaScript)
  9. Android SDK Tools Platform-tools Build-tools
  10. Kaggle:Tabular Playground Series - May 2021
  11. VS2019+DCMTK3.6.6环境配置
  12. 知识图谱之社交网络分析(SNA)之python处理
  13. 如何实现类似淘宝商城的七天自动确认收货???
  14. 51Talk-Level 7 Unit 1 L4
  15. Cortex M3 DWT
  16. 【JavaSE】JDK新特性(二)————接口新特性,函数式接口(Suppier,Comsumer,Predicate,Function)
  17. Bagging...
  18. 高校逐梦元宇宙,是风口还是噱头?
  19. Centos7命令行方式安装DM
  20. 20220530-动态规划算法及Needleman-Wunsch算法

热门文章

  1. threadlocal的set()方法中的内存回收
  2. CopyOnWriteArrayList原理及算法题存档
  3. js根据已知数组长度创建一个一样长度的数组并初始化值为0
  4. 如何在服务器上使用宝塔面板?
  5. Consul服务治理原理简介及使用过程
  6. android bu,Android请求权限之不再询问或禁止不再提示
  7. KVM中断虚拟化(二)
  8. Linux 问题故障定位,看这一篇就够了
  9. java反编译源码_java反编译获取源码
  10. Spring Security:基于内存的认证信息