sql 질문 드립니다 (공부중) 0 2 1,231

by 택코르 [SQL Query] sql DB [2022.03.18 14:04:46]


1.jpg (224,344Bytes)
2.jpg (267,686Bytes)
3.jpg (363,731Bytes)

테이블을 만드는데 쿼리문을 어떻게 구성해야 할까요....

 

혼자 해보고는 있는데 더 좋은 답이 있는지 궁금합니다.

by 마농 [2022.03.21 09:45:54]
WITH Table_01 (seq, id, x, y, timezn_cd
, m00, m10, m15, m20, m25, m30, m35, m40, m45, m50, m55, m60, m65, m70
, f00, f10, f15, f20, f25, f30, f35, f40, f45, f50, f55, f60, f65, f70
, total, admi_cd, etl_ymd
) AS
(
          SELECT  1, 85292512, 452052, 362693, 0, 0, 0, 0,  2,  3,  3,  3,  3, 4, 2,  4, 6, 3, 1, 0, 0, 1, 2, 3, 2, 2, 1, 3, 3, 1, 1, 1, 1,  55, 27110517, '20211230'
UNION ALL SELECT  2, 85292512, 452052, 362693, 0, 0, 0, 0,  2,  3,  4,  3,  4, 5, 3,  4, 3, 2, 2, 0, 0, 1, 2, 2, 1, 1, 2, 3, 2, 1, 1, 1, 1,  53, 27110565, '20211209'
UNION ALL SELECT  3, 85292512, 452052, 362693, 0, 0, 0, 0,  2,  7,  3,  4,  2, 2, 2,  4, 2, 1, 1, 0, 0, 0, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 0,  43, 27110640, '20211214'
UNION ALL SELECT  4, 85292512, 452052, 362693, 0, 0, 0, 0,  3,  7,  5, 11,  5, 7, 6,  6, 7, 2, 1, 0, 0, 1, 5, 2, 2, 4, 2, 6, 2, 2, 1, 2, 1,  90, 27110670, '20211227'
UNION ALL SELECT  5, 85292512, 452052, 362693, 0, 0, 0, 1,  2,  6,  3,  6,  3, 3, 5,  4, 4, 2, 1, 0, 0, 1, 2, 3, 2, 1, 2, 3, 2, 2, 1, 1, 1,  61, 27110680, '20211218'
UNION ALL SELECT  6, 85292512, 452052, 362693, 0, 0, 0, 1,  3,  7,  6,  8,  8, 9, 5,  6, 7, 4, 1, 0, 0, 1, 3, 4, 3, 5, 4, 4, 3, 2, 0, 1, 1,  96, 27140510, '20211205'
UNION ALL SELECT  7, 85292512, 452052, 362693, 0, 0, 1, 4, 12, 15, 13, 10, 10, 8, 8, 10, 9, 5, 3, 0, 1, 4, 8, 8, 4, 7, 5, 7, 6, 5, 4, 1, 2, 170, 27140540, '20211201'
UNION ALL SELECT  8, 85292512, 452052, 362693, 1, 0, 0, 0,  1,  3,  2,  2,  3, 2, 2,  2, 2, 2, 1, 0, 0, 0, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1,  33, 27140570, '20211215'
UNION ALL SELECT  9, 85292512, 452052, 362693, 1, 0, 0, 0,  2,  2,  1,  2,  1, 2, 2,  1, 3, 0, 1, 0, 0, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0,  28, 27140600, '20211228'
UNION ALL SELECT 10, 85292512, 452052, 362693, 1, 0, 0, 0,  2,  3,  2,  2,  3, 1, 1,  3, 2, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0,  29, 27140615, '20211202'
)
, Table_02 (seq, id, emd_cd) AS
(
          SELECT  1, 85292512, 3020010100
UNION ALL SELECT  2, 85292513, 3020010200
UNION ALL SELECT  3, 85292514, 3020010300
UNION ALL SELECT  4, 85292515, 3020010400
UNION ALL SELECT  5, 85292516, 3020010500
UNION ALL SELECT  6, 85292517, 3020010600
UNION ALL SELECT  7, 85292518, 3020010700
UNION ALL SELECT  8, 85292519, 3020010800
UNION ALL SELECT  9, 85292520, 3020010900
UNION ALL SELECT 10, 85292521, 3020011000
)
, Table_03 (seq, emd_cd, emd_nm) AS
(
          SELECT  1, 3020010100, '원내동'
UNION ALL SELECT  2, 3020011000, '방동'
UNION ALL SELECT  3, 3020014700, '송강동'
UNION ALL SELECT  4, 3020011200, '구암동'
UNION ALL SELECT  5, 3020011700, '장대동'
UNION ALL SELECT  6, 3020011900, '노은동'
UNION ALL SELECT  7, 3020012000, '지족동'
UNION ALL SELECT  8, 3020014300, '탑립동'
UNION ALL SELECT  9, 3020012300, '어은동'
UNION ALL SELECT 10, 3020012500, '신성동'
)
-- MySQL(MariaDB) 에서 test --
SELECT SUBSTR(a.etl_ymd, 1, 6) etl_ym
     , c.emd_nm
     , a.timezn_cd
     , CASE WHEN DATE_FORMAT(a.etl_ymd, '%w') IN (6, 0) THEN '휴일' ELSE '평일' END x
     , ROUND(AVG(m10 + m15 + m00)) 남성_10대이하
     , ROUND(AVG(m20 + m25      )) 남성_20대
     , ROUND(AVG(m30 + m35      )) 남성_30대
     , ROUND(AVG(m40 + m45      )) 남성_40대
     , ROUND(AVG(m50 + m55      )) 남성_50대
     , ROUND(AVG(m60 + m65 + m70)) 남성_60대이상
     , ROUND(AVG(f10 + f15 + f00)) 여성_10대이하
     , ROUND(AVG(f20 + f25      )) 여성_20대
     , ROUND(AVG(f30 + f35      )) 여성_30대
     , ROUND(AVG(f40 + f45      )) 여성_40대
     , ROUND(AVG(f50 + f55      )) 여성_50대
     , ROUND(AVG(f00 + f65 + f70)) 여성_60대이상
     , ROUND(AVG(m00+m10+m15+m20+m25+m30+m35+m40+m45+m50+m55+m60+m65+m70)) 남성
     , ROUND(AVG(f00+f10+f15+f20+f25+f30+f35+f40+f45+f50+f55+f60+f65+f70)) 여성
     , ROUND(AVG(total)) 전체
  FROM Table_01 a
 INNER JOIN Table_02 b
    ON a.id = b.id
 INNER JOIN Table_03 c
    ON b.emd_cd = c.emd_cd
 WHERE a.etl_ymd BETWEEN '20211201' AND '20211231'
 GROUP BY SUBSTR(a.etl_ymd, 1, 6)
     , c.emd_nm
     , a.timezn_cd
     , CASE WHEN DATE_FORMAT(a.etl_ymd, '%w') IN (6, 0) THEN '휴일' ELSE '평일' END
;

 


by 택코르 [2022.03.21 09:54:01]

와 이 긴걸..... 진짜 감사합니다. 참고해서 공부 열심히 하겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입