group by语句
group by语法
select column_name,function(column_name)
from table_name
group by column_name;
group by语句,根据一个或者多个列对结果集分组,分组的列上使用聚合函数count、avg、sum、max、min。
聚合函数对一组值操作,返回单个值,也被称为组函数。
count() 如果参数是列名称,忽略null。如果参数是*或者常量参数,则包含null。
avg() 函数会忽略null,实际应用中判定是否需要对null做处理。
常用于替换null值的函数,coalesce(column_name,0) 此处coalesce函数将column_name中null值替换为0,也可以替换为其他数值。
聚合函数可以应用于select、having子句中。having只能放在group by之后。
聚合函数不可以用于where语句中,因为where是筛选逐条的记录。
窗口函数
将数值10,9,9,8从大到小排序,三种排序函数结果如下
rank() 排序情况1 2 2 4
dense_rank() 排序情况1 2 2 3
row_number() 排序情况 1 2 3 4
窗口函数是对where或者group by子句处理后的结果操作,原则上只用于select子句中。
function()over(partition by [分组字段] order by [排序字段] asc/desc
rows/range between 起始位置 and 结束位置)
#current row 边界是当前行
#unbounded preceding 边界是分区中的第一行
#unbounded following 边界是分区中的最后一行
#expr preceding 边界是当前行减去expr的值
#expr following 边界是当前行加上expr的值。rows是基于行数,range是基于值的大小
union拼接俩select结果
只使用union,则拼接结果去除重复记录,效果和使用union distinct一样;如果使用union all则结果包含重复记录。
union的第二个select语句,不能使用括号括起来。