当前位置: 首页> 教育> 幼教 > 重庆建设公司_机械网站建设案例_如何注册一个网站_推广产品吸引人的句子

重庆建设公司_机械网站建设案例_如何注册一个网站_推广产品吸引人的句子

时间:2025/8/19 21:23:19来源:https://blog.csdn.net/m0_63845988/article/details/142567152 浏览次数:0次
重庆建设公司_机械网站建设案例_如何注册一个网站_推广产品吸引人的句子

思维导图

判断函数

if(expr,v1,v2): 表达式结果为true返回v1,否则返回v2
ifnull(列名,dv): 列值为null返回dv,否则返回列值.
nullif(expr1,expr2): 表达式1=表达式2返回null,不等于返回表达式1的值.

窗口函数

作用: 可以为表新增一列,新增的列是什么取决于over()函数前面的函数.
主要函数是: over(parttion by 列名 order by 列名 [窗口范围])
结合函数:1.聚合函数:sum(),count(),avg(),max(),min()2.序号函数:rank(),row_number(),dense_rank()3.分布函数:percent_rank(),cume_dist()4.前后函数:lag(),lead()5.头尾函数:first_value(),last_value()6.其他函数:nth_value(),ntile()
窗口范围:rows between 起始行 and 结束行[rows between unbound preceding and unbound following #最大窗口rows between 1 preceding and 1 following             # 往上1行和往下一行.rows between 2 preceding and  current row            #往上2行到当前行rows between unbound preceding and current row       #往上无边界到当前.rows between current row  and unbound following      #当前行到往下无边界]

序号函数

row_number():      按照 1,2,3,4 标记序号
rank():            按照 1,2,2,4 标记序号
dense_rank():      按照 1,2,2,3 标记序号
- 需求 分组后排序
selecte.dname,e.ename,e.salary,row_number() over (partition by e.dname order by e.salary) as rn -- 1234[5,6,6,7]
from employee e ;
​
selecte.dname,e.ename,e.salary,rank() over (partition by e.dname order by e.salary) as rn     -- 1224[5,6,6,7]
from employee e ;
​
selecte.dname,e.ename,e.salary,dense_rank() over (partition by e.dname order by e.salary) as rn-- 1223[5,6,6,7]
from employee e ;

聚合函数结合

聚合函数:sum(),count(),avg(),max(),min()
窗口大小:1.如果只写over():                 此时窗口是第一行到最后一行(最大窗口)2.如果写了over(partition by 列) : 此时窗口大小是分组内的第一行到最后一行3.如果写了over(partition by 列 order by 列 ): 窗口大小是分组内当前行到往上无边界4.如果不满意上方的默认窗口,怎么办??? : 通过over(partition by dname order by hiredate rows between 1 preceding and 1 following)指定窗口.
selectdname,ename,salary,sum(salary) over(partition by dname order by hiredate rows between 1 preceding and 1 following) as pv1,count(1) over(partition by dname order by hiredate rows between unbounded preceding and unbounded following) as pv2,avg(salary) over (partition by dname) as pv3
from employee;

前后函数

lag(显示的列,往前n条,找不到默认值)
lead(显示的列,往后n条,找不到默认值)
selectdname,ename,hiredate,salary,lag(hiredate,1,'默认时间') over(partition by dname order by hiredate) as last_1_time,lag(hiredate,2) over(partition by dname order by hiredate) as last_2_time
from employee;
---------------------------------------------------------
selectdname,ename,hiredate,salary,lead(hiredate,1,'默认时间') over(partition by dname order by hiredate) as last_1_time,lead(hiredate,2) over(partition by dname order by hiredate) as last_2_time
from employee;

首尾函数

-- todo 首尾函数----------first_value默认窗口是:分组内当前行到往上无边界-------------
-- todo 首尾函数----------last_value默认窗口是:分组内当前行到往上无边界-------------
-- 注意,  如果不指定ORDER BY,则进行排序混乱,会出现错误的结果
-- 需求1 : 截止到当前入职的人员.按照日期排序查询第1个入职和最后1个入职员工的薪资
selectdname,ename,hiredate,salary,first_value(salary) over(partition by dname order by hiredate) as first,last_value(salary) over(partition by dname order by  hiredate) as last
from  employee;
​
-- 需求1 : 统计各部门全部数据.按照日期排序查询第1个入职和最后1个入职员工的薪资
selectdname,ename,hiredate,salary,first_value(salary) over(partition by dname order by hiredate) as first,last_value(salary) over(partition by dname order by  hiredate rows between unbounded preceding and unbounded following) as last
from  employee;

其它函数

NTH_VALUE(expr,n): 用途:返回窗口中第n个expr的值。expr可以是表达式,也可以是列名
NTILE(n):用途:将分区中的有序数据分为n个等级,记录等级数
-- todo  nth_value(列,第几条数据)
-- 查询每个部门截止目前薪资排在第二和第三的员工信息
selectdname,ename,hiredate,salary,nth_value(salary,2) over(partition by dname order by hiredate) as second_score,nth_value(salary,3) over(partition by dname order by hiredate) as third_score
from employee;
​
-- todo ntile()根据入职日期将每个部门的员工分成3组
selectdname,ename,hiredate,salary,
ntile(3) over(partition by dname order by  hiredate  ) as rn
from employee;
关键字:重庆建设公司_机械网站建设案例_如何注册一个网站_推广产品吸引人的句子

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: