文档章节

分组与聚合

wangxinchao66
 wangxinchao66
发布于 2017/02/05 11:38
字数 728
阅读 3
收藏 0

一、分组(group by)

    我们查询时根据自己的需要按 特定列 进行分组, 但分组后,  除了特定列的数据是我们需要的直观数据(这也是我们有时用他来代替 distinct()的原因)外,其他列的数据,就是按数据库 自排序显示第一行数据,这并不是我们需要的。 所以我们常常需要用到聚合函数。

说明:

分组的条件:

(1)、 其中某一列

(2)、 表的多列(除了聚合列外, 多列需要显示)

(3)、 根据 表达式 进行分组

eg:

select 
extract(YEAR from cl.`student_birthday` ) as year
,cl.`student_birthday` , cl.`student_name` 
from `clazz_apply` cl where cl.`is_delete` = 0
group by extract(YEAR from cl.`student_birthday` )

二、 聚集函数 

1、 max()  返回集合中的最大值 

2、 min()  返回集合中的最小值

3、 avg() 返回集合中的平均值 

4、 sum() 返回集合中所有值的和

5、count() 返回集合的个数

    如果是对不同值进行计数,  那么需要配合distinct()函数 。

说明:

(1)、聚集函数的参数 , 可是某一列,或任意表达式。

(2)、count(*)是对所有的行进行统计,包括这一列的行值为Null, 但count()列, 会对null行进行忽略。

eg:

 select max(timestampdiff(year,cl.`student_birthday`,now())) as max_age
    ,min(timestampdiff(year,cl.`student_birthday`,now())) as min_age
    ,avg(timestampdiff(year,cl.`student_birthday`,now()))as avg_age
    ,count(cl.`student_name` ), cl.`clazz_id` 
from `clazz_apply` cl where cl.`is_delete` = 0 group by cl.`clazz_id` ;

三、 显式与隐式的分组

只有聚集函数返回的列, 有时我们不指定分组列, 他会将所有满足条件的行作为一组,进行隐式的分组。

很多时候我们需要根据具体某一列或某几列的值进行分组,  那时我们必须用group by 进行显式的分组。

 

四、 产生合计数

语法: mysql

(1)、 with rollup

场景: 很多时候,我们分组进行了统计, 但最后还需要对  所有的分组  进行合计。使用with rollup就会产生合计数。

详细例子:http://blog.csdn.net/greystar/article/details/48973599

eg:

select 
cl.`status` , extract(YEAR from cl.`student_birthday` ) as year
,cl.`student_birthday` , cl.`student_name` ,count(cl.id)
from `clazz_apply` cl where cl.`is_delete` = 0
group by cl.`status` , extract(YEAR from cl.`student_birthday` ) with rollup 

(2)、with cube (mysql 6.0 以上不支持了)

对于多列分组,他会产生以每一列  作为分组基础而产生的合计。

 

五、 分组的过滤条件

    having 

场景 :  根据分组聚合后,我们需要聚合后的值进行筛选。(区别与where 子句的不同 ,where 子句是在分组之前被执行的,所以where 只能根据具体列值 与  表达式的值   ), 但它只能以聚合值作为条件。

eg:

select 
extract(YEAR from cl.`student_birthday`) as year
,count(cl.`id`) 
from `clazz_apply` cl
where cl.`is_delete` = 0
group by  extract(YEAR from cl.`student_birthday` ) 
having count(cl.`id`) < 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

wangxinchao66
粉丝 0
博文 24
码字总数 10464
作品 0
成都
私信 提问
MongoDB的简单学习8-聚合操作

在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce。Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复杂的聚合逻辑。MongoDB不允许Pipelin...

wind2012
2018/10/14
18
0
搜索引擎(Elasticsearch聚合分析)

学习目标 掌握聚合分析的查询语法。 掌握指标聚合、桶聚合的用法 聚合分析简介 ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某...

这很耳东先生
04/01
42
0
where、having之间的区别和用法

聚合函数是比较where、having 的关键。 开门见山。where、聚合函数、having 在from后面的执行顺序: where>聚合函数(sum,min,max,avg,count)>having 列出group by来比较二者。()因where和h...

踏破铁鞋无觅处
2018/10/15
10
0
初识PB级数据分析利器Prestodb

初始PB级数据分析利器Prestodb 什么是prestodb prestodb整体架构 物理执行计划 什么是prestodb prestodb,是facebook开源的一款sql on hadoop系统,是facebook的工程师对hive的查询速度忍无可...

rlnlo2pnefx9c
2017/12/26
0
0
python/pandas数据挖掘(十四)-groupby,聚合,分组级运算

groupby 以上的分组键均为Series,实际上分组键可以是任何长度适当的数组 可以看出没有key2列,因为df[‘key2’]不是数值数据,所以被从结果中移除。默认情况下,所有数值列都会被聚合,虽然...

youngbit007
2017/01/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部