乐趣区

关于hadoop:SQL分组函数和聚合函数的几点说明

1 分组聚合的起因

SQL 中分组函数和聚合函数之前的文章曾经介绍过,单说这两个函数有可能比拟好了解,分组函数就是 group by,聚合函数就是 COUNT、MAX、MIN、AVG、SUM。

拿上图中的数据进行解释,假如依照 product_type 这个字段进行分组,分组之后后果如下图。

SELECT product_type from product
group by product_type

从图中能够看出被分为了三组,别离为厨房用具、衣服和办公用品,就相当于对 product_type 这个字段进行了去重,的确 group by 函数有去重的作用。

SELECT DISTINCT product_type from product

假如分组之后,我想看一下价格,也就是 sale_price 这个字段的值,依照如下这个写法,会报如下谬误。

SELECT product_type,sale_price from product
group by product_type

这是为什么呢?原表依照 product_type 分组之后,厨房用具对应 4 个值,衣服对应 2 个值,办公用品对应 2 个值,这就是在取 sale_price 这个字段的时候为什么报错了,一个空格中不能填入多个值,这时候就能够用聚合函数了,比方求和,求均匀,求最大最小值,求行数。聚合之后的值就只有一个值了。

SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from product
group by product_type

对于多个字段的分组,其原理是一样的。从上述中记住两点:分组去重和分组聚合。

2 distinct 和 group by 去重的区别

  • Distinct 和 group by 设计时侧重点不一样

distinct 只是为了去重,而 group by 是为了聚合统计的。

  • 两者都有去重的成果,然而执行的效率不一样

单个字段去重

--DISTINCT
SELECT distinct product_type from product
--GROUP BY
select product_type from product
GROUP BY product_type

多个字段去重

--DISTINCT
SELECT distinct product_name, product_type from product
--GROUP BY
select product_name, product_type from product
GROUP BY product_name, product_type

执行效率

select < 列名 1 >,< 列名 2 >

from< 表名 >
where 查问条件
group by 分组类别
having 对分组后果指定条件

order by < 列名 >(desc)limit 数字 

SQL 语言的运行程序,先执行上图中的第一步,而后再执行 select 子句,最初对后果进行筛选。distinct 是在 select 子句中,而 group by 在第一步中,所以 group by 去重比 distinct 去重在效率上要高。

文章继续更新,能够微信搜寻「大数据分析师常识分享」第一工夫浏览,回复【666】获取大数据相干材料。

退出移动版