对于 group by 个人理解

Group By

group by 顾名思义就是对数据进行分组。或者理解为将数据,按照进行分组的字段,进行去重操作,该字段下每个值只保留一份数据。

但是该如何对该group下的所有数据信息进行操作,比如说我想对该分组的数据信息进行统计展示,此时就需要使用聚合函数。

HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。

还有一种使用方式:将group分组后的数据作为临时表,再使用select 针对查询。

select data.Email  from 
(select *,count(*) as numbers from person group by Email ) as data 
where data.numbers >1;

Group 个人感觉就是一个语法糖,主要步骤如下:以group by email分类

  1. 先把表按照指定的分组拆分成n个小表。注意差分表的过程中会去掉不符合where条件的数据记录

    这里的每个小表的email字段都是相同的。

  2. 按照约束条件,如select count(),having count将每个小表中的记录进行处理,一般只能进行统计类操作,如求均值,求最大值此类

  3. 再在每个小表中取一条数据。

    1. 如果存在聚合函数,就返回聚合函数的结果 + 小表中的第一条数据 拼接出来的数据记录
    2. 不存在聚合函数,直接返回小表记录的第一条
  4. 最后将每个小表返回的那一条记录值,拼接为一整个完整的表。


猜你喜欢

转载自www.cnblogs.com/jianga/p/12693163.html
今日推荐