案例:
得出此結果:(表g_test 時間列update_time date 功率列pm number)
月份、功率分佈情況、數量
2013-01 功率小於70 30
2013-01 功率70 21
2013-01 功率71 30
2013-01 功率72 35
2013-01 功率73 40
2013-01 功率74 44
2013-01 功率75 41
2013-01 功率大於75 40
2013-02 功率72 35
2013-02 功率73 40
2013-02 功率74 44
2013-02 功率75 41
2013-02 功率大於75 40
注:pm值小數點不算,
71.1算做71,
71.9也算作71。
根據update_time,分別彙總2013年1月至5月的數據。
方法一:
SQL>SELECT to_char(update_time, 'yyyymm'),
CASE WHEN trunc(pm) < 70 THEN '功率小於70'
WHEN trunc(pm) >= 76 THEN '功率大於等於76'
ELSE '功率'|| to_char(trunc(pm))
END 功率分佈情況,
COUNT(pm)
FROM g_test
WHERE to_char(update_time, 'yyyymm') BETWEEN '201301' AND '201305'
GROUP BY to_char(update_time, 'yyyymm'),
CASE WHEN trunc(pm) < 70 THEN '功率小於70'
WHEN trunc(pm) >= 76 THEN '功率大於等於76'
ELSE '功率'|| to_char(trunc(pm))
END
ORDER BY to_char(update_time, 'yyyymm');
方法二:
SELECT to_char(update_time, 'yyyy-mm') as 月份,
CASE WHEN trunc(pm) < 70 THEN '功率小於70'
WHEN TRUNC(pm) >= 76 THEN '功率大於等於76'
WHEN pm IS NULL THEN 'PM異常值'
ELSE '功率'|| to_char(trunc(pm))
END 功率分佈情況,
COUNT(*) AS "統計數量"
FROM g_test
WHERE
update_time >= to_date('2013-01-01 00:00:00','YYYY-MM-DD hh24:mi:ss')
AND update_time <= to_date('2013-06-01 00:00:00','YYYY-MM-DD hh24:mi:ss')
GROUP BY to_char(update_time, 'yyyy-mm'),
CASE WHEN trunc(pm) < 70 THEN '功率小於70'
WHEN trunc(pm) >= 76 THEN '功率大於等於76'
WHEN pm IS NULL THEN 'PM異常值'
ELSE '功率'|| to_char(trunc(pm))
END
ORDER BY to_char(update_time, 'yyyy-mm')
;
1、注意時間,儘量把表達式寫在右邊。
2、處理空值,PM異常值。
3、count(*) 即可,不用count(pm),否則異常值統計不出來。
月份功率分佈情況統計數量
-------------- --------------- ----------
2013-03功率74 14135
2013-03功率75 1620
2013-03功率大於等於76 1039
2013-03功率小於70 10705
2013-04PM異常值 15
2013-04功率70 1915
2013-04功率71 3261
2013-04功率72 6238
2013-04功率73 8536
2013-04功率74 5780
2013-04功率75 1251