group by
分组是把类似的行组织在一起的一种方式。当查询中使用group by时,结果集中的每一行都是一个组,而且表示一行或多行中的某一列或多列具有相同值。
如果某个组只是一行的唯一实例,该行表示一行或多行的某个特定列或某些列具有相同值
在sql中null是合法的值,聚集函数会忽略null,select count(null) from dual----0 select count(3) from dual---1
select COALESCE(null,null,6) from dual---6 返回第一个非空值
union all&union union去重复
当使用聚集函数的时候,对应select列表中的项,如果没有把它当作聚集函数的参数使用,那么它必须是组的一部分
由用户定义的函数,窗口函数和非关联的的标量子查询返回的常量,标量值,都是这种规则的例外。
由于select字句是在group by子句之后进行计算的,所以select列表允许这些结构
select t.column,count(t.column),count(*),'hello' as a,(select count(*) as c from dual) from table t group by t.column
select列表中没有包含在group by子句中的项不会影响column值,也不会改变count()的值
对于可能会更改组或更改聚集函数值的select列表项,一定包含于group by子句中。select列表中的附加项不会更改任何组的count值,也不会更改组本身
group by c1,c2 组是独特的,c1和c2的值都不是独特的,但两者的组合是独特的。
窗口
与聚集函数一样,窗口函数也针对定义的行集执行聚集,但它不像聚集函数那样每组只返回一个值,窗口函数可以为每组返回多个值
count(*)over() over关键字表明:把count的调用看作窗口函数,而不是聚集函数。sql标准允许将所有聚集函数用作窗口函数,而用关键字over区分两种用法
在sql处理中,窗口函数都是最后一步执行,而且仅位于order by子句之前。
partition by
count(*)over(partition by column)
如果partition by子句中没有分区,就意味着处理整个结果集
在同一个select语句中,一个窗口函数的计算独立于按其他列分区的其他窗口函数的计算
窗口函数处理行的顺序很重要,会影响查询返回的结果,所以,窗口函数语法包含了可以放在over子句内的order by小子句,order by子句用于指定分区中行的排序方式
当在窗口函数的over子句中使用了order by子句时,就指定了两件事
1 分区中的行如何排序
2 在计算中包含哪些行
select t.name,t.dept_name,
count(*) over(partition by t.dept_name),
count(*) over(partition by t.sex), --156 228
count(*) over(order by t.sex) --156 384
from tb_employee_mst t where t.grade = 'G3'
框架子句
count(*) over(order by t.sex range between unbounded preceding and current row) --156 384
从当前行开始,包括它前面的所以行(前面的是在order by中定义的)
count(*) over(order by t.sex range between unbounded preceding and current row) --
当前行和前面一行做count(*)
count(*) over(order by t.sex rows between current row and unbounded following)
从当前行开始,包括他后面的所有行
count(*) over(order by t.sex rows between current row and 1 following)
当前行和后面一行做count(*)
range&rows
unbounded preceding --- ...2 preceding-- 1 preceding-- current row -- 1 following-- 2 following...-- unbounded following
hive的groupby与窗口函数哪个效率高
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
psql窗口函数 ROW_NUMBER的应用
psql窗口函数的使用
窗口函数 一对多 表结构 -
Apache Hive
Apache Hive的相关知识,包括简单介绍,环境配置,和使用简介
mysql Hive SQL