1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

Oracle实现分组统计记录

2022-11-18 | 数据库 | 1818ip | 618°c
A+ A-

今天刚上班不久,QQ滴滴的响个不停,看了下信息是一个网友要我帮忙下一个SQL语句,大体意思是:统计heart_active字段为不同情况的记录数,然后按时间来分组。

我想了下,心里想这好办,于是马上建了一个表,语句如下:

CREATETABLErfid_fixed_heart(input_datedate,heart_activeVARCHAR2(2));

接下来往rfid_fixed_heart表中插入了数据,heart_active字段为0和1, input_date中插入YYYY-MM-DD格式的数据。

后来就写了下面两个SQL给她,语句一和语句二有点区别,语句一快一统计出heart_active字段为不同情况的记录数,而语句二则只统计heart_active字段为0和1情况的记录数,两个语句的输出格式也有不同。具体如下:

语句一:

SELECTa.input_date,a.heart_active,SUM(decode(a.heart_active,1,1,0,1)) 
FROMrfid_fixed_hearta 
GROUPBYa.heart_active,a.input_date 
ORDERBYa.input_dateDESC;

语句二:

SELECTa.input_date,SUM(decode(a.heart_active,'0','1'))ASheart_active_0,SUM(decode(a.heart_active,'1','1'))ASheart_active_1 
FROMrfid_fixed_hearta 
GROUPBYa.input_date; 

很快就反馈过结果来了,没有达到预期的效果,但从她的结果可以看出是由于input_date插入的是YYYY-MM-DD 24HH:MI:SS格式的数据导致无法按日期来分组。

既然插入的是YYYY-MM-DD 24HH:MI:SS格式得数据,要按日期来排序就需要对input_date使用trunc函数来截取日期值。

最终把原来的两个SQL改成如下语句:

语句三:

SELECTtrunc(a.input_date,'dd'),a.heart_active,SUM(decode(a.heart_active,1,1,0,1)) 

FROMrfid_fixed_hearta 

GROUPBYa.heart_active,trunc(a.input_date,'dd') 

ORDERBYtrunc(a.input_date,'dd')DESC; 

语句四:

SELECTtrunc(a.input_date,'dd'),SUM(decode(a.heart_active,'0','1'))ASheart_active_0, 

SUM(decode(a.heart_active,'1','1'))ASheart_active_1 

FROMrfid_fixed_hearta 

GROUPBYtrunc(a.input_date,'dd'); 

把语句给那网友后,运行满足要求,OK。对于SQL语句的编写需要认真考虑数据特殊性和表结构,那样才能够实现SQL语句对不同环境的适用。

附未使用decode函数的实现SQL:

SELECTop_date,heart_active,SUM(heart_active_0)ASheart_active_0, 

SUM(heart_active_1)ASheart_active_1 

FROM(SELECTto_char(rfid_fixed_heart.input_date,'yyyy-mm-dd')ASop_date, 

heart_activeASheart_active, 

CASEheart_active 

WHEN'0'THEN

COUNT(heart_active) 

ELSE

0 

ENDASheart_active_0, 

CASEheart_active 

WHEN'1'THEN

COUNT(heart_active) 

ELSE

0 

ENDASheart_active_1 

FROMrfid_fixed_heart 

GROUPBYinput_date,heart_active)a 

GROUPBYop_date,heart_active 

ORDERBYop_dateDESC

结果如下:

本文来源:1818IP

本文地址:https://www.1818ip.com/post/4516.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。