WITH t AS ( SELECT 1 no, '2021.08.01 12:00:00' dt, 1 s1, 0 s2, 0 s3 UNION ALL SELECT 2, '2021.08.01 12:05:00', 0, 1, 0 UNION ALL SELECT 3, '2021.08.02 01:05:00', 1, 0, 0 UNION ALL SELECT 4, '2021.08.02 02:05:00', 0, 1, 0 UNION ALL SELECT 5, '2021.08.02 03:05:00', 0, 0, 1 ) , tm AS ( SELECT '00' tm UNION ALL SELECT '01' UNION ALL SELECT '02' UNION ALL SELECT '03' UNION ALL SELECT '04' UNION ALL SELECT '05' UNION ALL SELECT '06' UNION ALL SELECT '07' UNION ALL SELECT '08' UNION ALL SELECT '09' UNION ALL SELECT '10' UNION ALL SELECT '11' UNION ALL SELECT '12' UNION ALL SELECT '13' UNION ALL SELECT '14' UNION ALL SELECT '15' UNION ALL SELECT '16' UNION ALL SELECT '17' UNION ALL SELECT '18' UNION ALL SELECT '19' UNION ALL SELECT '20' UNION ALL SELECT '21' UNION ALL SELECT '22' UNION ALL SELECT '23' ) SELECT a.tm , SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.01' THEN b.s1 END) cnt1_20210801 , SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.01' THEN b.s2 END) cnt2_20210801 , SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.01' THEN b.s3 END) cnt3_20210801 , SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.02' THEN b.s1 END) cnt1_20210802 , SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.02' THEN b.s2 END) cnt2_20210802 , SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.02' THEN b.s3 END) cnt3_20210802 FROM tm a LEFT OUTER JOIN t b ON b.dt >= '2021.08.01' AND b.dt < '2021.08.03' AND a.tm = DATE_FORMAT(b.dt, '%H') GROUP BY a.tm ;
아 그리고 한가지 더 궁금한게 있습니다.
1~31일까지 다 표시 하려면
SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.01' THEN b.s1 END) cnt1_20210801
, SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.01' THEN b.s2 END) cnt2_20210801
, SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.01' THEN b.s3 END) cnt3_20210801
, SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.02' THEN b.s1 END) cnt1_20210802
, SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.02' THEN b.s2 END) cnt2_20210802
, SUM(CASE DATE_FORMAT(b.dt, '%Y.%m.%d') WHEN '2021.08.02' THEN b.s3 END) cnt3_20210802
이 부분을 31개 복붙으로 만들어야하나요??
네. 다 적어줘야 합니다.
다만. 월단위 조회라면? 년,월은 체크할 필요 없이 일자만 체크하면 되겠죠.
인라인뷰를 이용해 반복되는 부분을 최소화 시키세요.
WITH t AS ( SELECT 1 no, '2021.08.01 12:00:00' dt, 1 s1, 0 s2, 0 s3 UNION ALL SELECT 2, '2021.08.01 12:05:00', 0, 1, 0 UNION ALL SELECT 3, '2021.08.02 01:05:00', 1, 0, 0 UNION ALL SELECT 4, '2021.08.02 02:05:00', 0, 1, 0 UNION ALL SELECT 5, '2021.08.02 03:05:00', 0, 0, 1 ) , tm AS ( SELECT '00' tm UNION ALL SELECT '01' UNION ALL SELECT '02' UNION ALL SELECT '03' UNION ALL SELECT '04' UNION ALL SELECT '05' UNION ALL SELECT '06' UNION ALL SELECT '07' UNION ALL SELECT '08' UNION ALL SELECT '09' UNION ALL SELECT '10' UNION ALL SELECT '11' UNION ALL SELECT '12' UNION ALL SELECT '13' UNION ALL SELECT '14' UNION ALL SELECT '15' UNION ALL SELECT '16' UNION ALL SELECT '17' UNION ALL SELECT '18' UNION ALL SELECT '19' UNION ALL SELECT '20' UNION ALL SELECT '21' UNION ALL SELECT '22' UNION ALL SELECT '23' ) SELECT tm , SUM(CASE d WHEN '01' THEN s1 END) c1_01, SUM(CASE d WHEN '01' THEN s2 END) c2_01, SUM(CASE d WHEN '01' THEN s3 END) c3_01 , SUM(CASE d WHEN '02' THEN s1 END) c1_02, SUM(CASE d WHEN '02' THEN s2 END) c2_02, SUM(CASE d WHEN '02' THEN s3 END) c3_02 , SUM(CASE d WHEN '03' THEN s1 END) c1_03, SUM(CASE d WHEN '03' THEN s2 END) c2_03, SUM(CASE d WHEN '03' THEN s3 END) c3_03 , SUM(CASE d WHEN '04' THEN s1 END) c1_04, SUM(CASE d WHEN '04' THEN s2 END) c2_04, SUM(CASE d WHEN '04' THEN s3 END) c3_04 , SUM(CASE d WHEN '05' THEN s1 END) c1_05, SUM(CASE d WHEN '05' THEN s2 END) c2_05, SUM(CASE d WHEN '05' THEN s3 END) c3_05 , SUM(CASE d WHEN '06' THEN s1 END) c1_06, SUM(CASE d WHEN '06' THEN s2 END) c2_06, SUM(CASE d WHEN '06' THEN s3 END) c3_06 , SUM(CASE d WHEN '07' THEN s1 END) c1_07, SUM(CASE d WHEN '07' THEN s2 END) c2_07, SUM(CASE d WHEN '07' THEN s3 END) c3_07 , SUM(CASE d WHEN '08' THEN s1 END) c1_08, SUM(CASE d WHEN '08' THEN s2 END) c2_08, SUM(CASE d WHEN '08' THEN s3 END) c3_08 , SUM(CASE d WHEN '09' THEN s1 END) c1_09, SUM(CASE d WHEN '09' THEN s2 END) c2_09, SUM(CASE d WHEN '09' THEN s3 END) c3_09 , SUM(CASE d WHEN '10' THEN s1 END) c1_10, SUM(CASE d WHEN '10' THEN s2 END) c2_10, SUM(CASE d WHEN '10' THEN s3 END) c3_10 , SUM(CASE d WHEN '11' THEN s1 END) c1_11, SUM(CASE d WHEN '11' THEN s2 END) c2_11, SUM(CASE d WHEN '11' THEN s3 END) c3_11 , SUM(CASE d WHEN '12' THEN s1 END) c1_12, SUM(CASE d WHEN '12' THEN s2 END) c2_12, SUM(CASE d WHEN '12' THEN s3 END) c3_12 , SUM(CASE d WHEN '13' THEN s1 END) c1_13, SUM(CASE d WHEN '13' THEN s2 END) c2_13, SUM(CASE d WHEN '13' THEN s3 END) c3_13 , SUM(CASE d WHEN '14' THEN s1 END) c1_14, SUM(CASE d WHEN '14' THEN s2 END) c2_14, SUM(CASE d WHEN '14' THEN s3 END) c3_14 , SUM(CASE d WHEN '15' THEN s1 END) c1_15, SUM(CASE d WHEN '15' THEN s2 END) c2_15, SUM(CASE d WHEN '15' THEN s3 END) c3_15 , SUM(CASE d WHEN '16' THEN s1 END) c1_16, SUM(CASE d WHEN '16' THEN s2 END) c2_16, SUM(CASE d WHEN '16' THEN s3 END) c3_16 , SUM(CASE d WHEN '17' THEN s1 END) c1_17, SUM(CASE d WHEN '17' THEN s2 END) c2_17, SUM(CASE d WHEN '17' THEN s3 END) c3_17 , SUM(CASE d WHEN '18' THEN s1 END) c1_18, SUM(CASE d WHEN '18' THEN s2 END) c2_18, SUM(CASE d WHEN '18' THEN s3 END) c3_18 , SUM(CASE d WHEN '19' THEN s1 END) c1_19, SUM(CASE d WHEN '19' THEN s2 END) c2_19, SUM(CASE d WHEN '19' THEN s3 END) c3_19 , SUM(CASE d WHEN '20' THEN s1 END) c1_20, SUM(CASE d WHEN '20' THEN s2 END) c2_20, SUM(CASE d WHEN '20' THEN s3 END) c3_20 , SUM(CASE d WHEN '21' THEN s1 END) c1_21, SUM(CASE d WHEN '21' THEN s2 END) c2_21, SUM(CASE d WHEN '21' THEN s3 END) c3_21 , SUM(CASE d WHEN '22' THEN s1 END) c1_22, SUM(CASE d WHEN '22' THEN s2 END) c2_22, SUM(CASE d WHEN '22' THEN s3 END) c3_22 , SUM(CASE d WHEN '23' THEN s1 END) c1_23, SUM(CASE d WHEN '23' THEN s2 END) c2_23, SUM(CASE d WHEN '23' THEN s3 END) c3_23 , SUM(CASE d WHEN '24' THEN s1 END) c1_24, SUM(CASE d WHEN '24' THEN s2 END) c2_24, SUM(CASE d WHEN '24' THEN s3 END) c3_24 , SUM(CASE d WHEN '25' THEN s1 END) c1_25, SUM(CASE d WHEN '25' THEN s2 END) c2_25, SUM(CASE d WHEN '25' THEN s3 END) c3_25 , SUM(CASE d WHEN '26' THEN s1 END) c1_26, SUM(CASE d WHEN '26' THEN s2 END) c2_26, SUM(CASE d WHEN '26' THEN s3 END) c3_26 , SUM(CASE d WHEN '27' THEN s1 END) c1_27, SUM(CASE d WHEN '27' THEN s2 END) c2_27, SUM(CASE d WHEN '27' THEN s3 END) c3_27 , SUM(CASE d WHEN '28' THEN s1 END) c1_28, SUM(CASE d WHEN '28' THEN s2 END) c2_28, SUM(CASE d WHEN '28' THEN s3 END) c3_28 , SUM(CASE d WHEN '29' THEN s1 END) c1_29, SUM(CASE d WHEN '29' THEN s2 END) c2_29, SUM(CASE d WHEN '29' THEN s3 END) c3_29 , SUM(CASE d WHEN '30' THEN s1 END) c1_30, SUM(CASE d WHEN '30' THEN s2 END) c2_30, SUM(CASE d WHEN '30' THEN s3 END) c3_30 , SUM(CASE d WHEN '31' THEN s1 END) c1_31, SUM(CASE d WHEN '31' THEN s2 END) c2_31, SUM(CASE d WHEN '31' THEN s3 END) c3_31 FROM (SELECT a.tm , DATE_FORMAT(b.dt, '%d') d , b.s1, b.s2, b.s3 FROM tm a LEFT OUTER JOIN t b ON b.dt >= '2021.08.01' AND b.dt < '2021.09.01' AND a.tm = DATE_FORMAT(b.dt, '%H') ) a GROUP BY tm ;