聚合和旋转操作

聚合和旋转操作

聚合

聚合函数

MySQL数据库支持聚合(aggregation)操作,按照分组对同一组内的数据聚合进行统计操作,目前MySQL数据库支持的聚合函数有:

聚合函数

函数名函数名
AVG()STD()
BIT_AND()STDDEV_POP()
BIT_OR()STDDEV_SMAP()
BIT_XOR()STDDEV()
COUNT(DISTINCT)SUM()
COUNT()VAR_POP()
GROUP_CONCAT()VAR_SAMP()
MAX()VARIANCE()
MIN()

GROUP_CONCAT将分组后的非NULL数据通过连接符进行拼接,对NULL数据返回NULL值。

select a,group_concat(distinct b order by b desc separator ':')
from z
group by a;

distinct 选项可以去除重复值,order by选项可以对列进行排序,separator用于选择拼接的字符串值。

聚合算法

MySQL数据库仅支持流聚合,而其他的数据库可能会支持散列聚合。流 聚合依赖于获得的存储在group by列中的数据。如果一个SQL查询中包含的group by语句多余一行,流聚合或根据group by对行进行排序。

附加属性聚合

MAX()函数不支持对两列的数据进行判断,但是可以通过其他方法实现。比如将两列数据进行拼接。其中一个左移,然后加上另一个。

连续聚合

连续聚合是按时间顺序对有序数据进行聚合的操作。

累计聚合

累计聚合为聚合从序列内第一个元素到当前元素的数据。

滑动聚合

滑动聚合是按顺序对滑动窗口范围内的数据进行聚合的操作,与累计聚合不同,滑动聚合并不是统计开始计算的位置到当前位置的数据。
滑动聚合和累计聚合解决方案的主要区别在于联接的条件不同。

Pivoting

Pivoting是一项可以把行旋转为列的技术,在执行Pivoting的过程中可能会使用到聚合。

开放架构

开放架构是一种用于频繁更改架构的设计模式。利用关系数据库和SQL语句可以非常有效地处理DML(Data Manipulation Language,数据操纵语言),包括INSERT、SELECT、UPDATE和DELETE。然而,DDL(Data Definition Language,数据定义语言)。

关系除法

关系除法(Rational Division)和常见的关系运算JOIN、SEMI JOIN一样,都是一个关系代数。

Unpivoting

可以看成是Pivoting的反向操作。

CUBE和ROLLUP

MySQL数据库支持cube和rollup关键字,作为group by子句的选项,应用在对多个维度进行聚合的OLAP查询中。可以将rollup看做是cube的一种特殊情况。目前,MySQL仅仅是支持cube关键字,而没有真正在数据库层面实现对cube的支持。

ROLLUP

rollup是根据维度在数据结果集中进行的集合操作。

select 
	year(orderdate) as year,
	sum(qty) as sum from t
group by year(orderdate)
with rollup;

在使用rollup时需要注意以下几个方面:

  • order by
  • limit
  • null

order by 语句一般用来完成排序操作,但是在含有rollup的SQL语句中不能使用order by关键字,可见这两者为互斥的关键字。
在含有rollup的SQL语句中可以使用limit,但是由于rollup不能使用order by进行排序,因此limit的结果阅读性差,在大多数情况下无实际意义。
如果分组的列包含null值,那么rollup的结果可能是不正确的,因为rollup中进行分组统计时值null具有特殊意义,因此在进行rollup操作时,可以先将null值转换为一个不可能存在的值,或者没有特别含义的值。

CUBE

rollup是cube的一种特殊情况,和rollup操作一样,cube也是一种对数据的聚合操作,但是rollup只在层次上对数据进行聚合,而cube对所有的维度进行聚合,具有N个维度的列,cube需要 2 N 2^N 2N次分组操作,而rollup只需要N次分组操作。
目前MySQL数据库定义了cube关键字,但不支持cube操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值