[原创]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函数来截取日期值。