oracle中decode()实现分组统计

2011-03-28

最近,在做项目数据查询的时候,需要实现统计某个字段为不同情况的记录数,然后按时间来分组。

字段heart_active是varchar(2)类型,只分为0和1两种类型。

脑袋里面最开始想到的就是用case when then 语句来实现。然后根据时间来分组。这样很快容易实现效果了。

但听网友说oracle里面有个函数decode()可以实现,由于不懂oracle函数,网上查了也一知半解的。

最后向网友请教,

 --方法一:

SELECT TRUNC(a.INPUT_DATE,'dd')AS Input_Date, a.HEART_ACTIVE,SUM(DECODE(a.HEART_ACTIVE, 1, 1, 0, 1))as Heart_Count



  FROM ext.rfid_fixed_heart a



  where  reader_id=1



 GROUPBY a.HEART_ACTIVE, TRUNC(a.INPUT_DATE,'dd')



 ORDERBY trunc(a.INPUT_DATE,'dd')DESC;

 

 -- --方法二:

SELECT TRUNC(a.input_date,'dd')as Input_Date,SUM(decode(a.heart_active,'0','1'))AS heart_active_0,



            SUM(decode(a.HEART_ACTIVE,'1','1'))AS HEART_ACTIVE_1



    FROM ext.rfid_fixed_heart a



  where reader_id=1



 GROUPBY TRUNC(a.input_date,'dd');

 

在这前面发现了个问题,就是INPUT_DATE插入的是YYYY-MM-DD 24HH:MI:SS格式的数据导致无法按日期来分组。

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

你可能感兴趣的:(oracle)