CSDN话题挑战赛第2期
参赛话题:学习笔记
今天需要统计24小时内数据分布,每次都是现用现查,非常不方便,这次记录下,以便于下次使用
-
一、主要功能是:固定返回24行数据,24小时的统计数据,不存在数据为0
-
参考:
-
使用with建立临时表aa、bb
aa表查出24行对应24小时bb表查出统计的数据
with
aa as(select rownum-1 rn from dual connect by rownum<=24),
bb as (select count(1) num, to_char(start_time,'hh24') hours from record_relation where to_char(start_time,'yyyy-mm-dd') = '2022-09-17' group by to_char(start_time,'hh24')
)
SELECT RN,NVL(hours,0) HOURS,NVL(num,0) num FROM aa LEFT JOIN bb ON aa.RN=bb.hours ORDER BY RN ASCrn对应24小时,HOURS对应数据,有数据的显示小时,没有的显示0 ,num对应统计数
-
参考上图,0点有数据,hours显示00,统计数为1,4点同理
connect by:
-
CONNECT BY子句在执行分层查询时确定行的父子关系。
CONNECT BY子句具有以下常规形式:
CONNECT BY { PRIOR parent_expr = child_expr | child_expr = PRIOR parent_expr }
在候选父行上对
parent_expr
求值。如果FROM
所返回行的parent_expr = child_expr
结果为TRUE
,则此行被视为父行的子行。 -
当连接条件(connect by条件)没有限制记录之间的关系(即 connect by里没有类似 id=prior pid的条件,而是 connect by rownum<xxx 或 connect by level<xxx )时,每一条记录都会作为自己或者其他记录的子节点,也就说,每一条记录的子节点就是表上所有的记录。而树的层数就是rownum(或是level)值。
-
二、固定返回12行,按照月份统计数据
-
with
aa as(select rownum rn from dual connect by rownum<=12),
bb as (select count(1) num, to_char(start_time,'mm') hours from asset.data_dispatching_record where to_char(start_time,'yyyy-mm-dd') = '2022-09-17' group by to_char(start_time,'mm')
)
SELECT RN,NVL(hours,0) HOURS,NVL(num,0) num FROM aa LEFT JOIN bb ON aa.RN=bb.hours ORDER BY RN ASC