월별로 통계 뽑는 쿼리 문의드립니다. 0 3 917

by 박준수 [MySQL] [2021.01.22 12:08:33]


안녕하세요

목록에서 통계를 뿌려야 하는데요

아래와 같이 테이블 컬럼과 데이터는 실제로 5월 11월 두개 밖에 없습니다.

구현해야 하는 부분이 1-12월까지 목록에 다 뿌리고 데이터에는 값이 있으면 그냥 뿌려주고

없으면 0으로 보여주게 하고 있는데요

그냥 union으로 1-12월 묶어서 서브쿼리 형태로만 작업하면 되는건지 

아니면 case로 서브쿼리 형태로 나눠서 작업을 해야하는지 질문 드립니다.

select year, month, code, vitcas, vitti, emgcas, emvitcas, emvitti from user_month_sum

2020   5    001    433 123    23    24    1
2020   11      001 343    231    2    123    2

 

 

by 마농 [2021.01.22 17:00:31]
WITH user_month_sum(year, month, code, vitcas, vitti, emgcas, emvitcas, emvitti) AS
(
          SELECT 2020,  5, '001', 433, 123, 23,  24, 1
UNION ALL SELECT 2020, 11, '001', 343, 231,  2, 123, 2
)
SELECT a.year
     , b.month
     , a.code
     , IFNULL(c.vitcas  , 0) vitcas
     , IFNULL(c.vitti   , 0) vitti
     , IFNULL(c.emgcas  , 0) emgcas
     , IFNULL(c.emvitcas, 0) emvitcas
     , IFNULL(c.emvitti , 0) emvitti
  FROM (SELECT 2020 year, '001' code) a -- 검색 조건
 CROSS JOIN
       (SELECT 1 month
        UNION ALL SELECT  2
        UNION ALL SELECT  3
        UNION ALL SELECT  4
        UNION ALL SELECT  5
        UNION ALL SELECT  6
        UNION ALL SELECT  7
        UNION ALL SELECT  8
        UNION ALL SELECT  9
        UNION ALL SELECT 10
        UNION ALL SELECT 11
        UNION ALL SELECT 12
        ) b
  LEFT JOIN user_month_sum c
    ON a.year  = c.year
   AND a.code  = c.code
   AND b.month = c.month
;

 


by 박준수 [2021.01.24 15:39:19]

안녕하세요

답변 잘 받았습니다.

주신 쿼리로 좀 원래 사용하도록 변형을 하려는데 잘 안되서 

다시 질문드립니다.

WITH user_month_sum(year, month, code, vitcas, vitti, emgcas, emvitcas, emvitti) AS

(

          SELECT 2020,  5, '001', 433, 123, 23,  24, 1

UNION ALL SELECT 2020, 11, '001', 343, 231,  2, 123, 2

)

해당 부분이 하드 코딩이 아니라 

select year, month, code, vitcas, vitti, emgcas, emvitcas, emvitti Suser_month_sum 

union all 형식으로 디비값을 셀렉트 해서 변형하는걸로 작업하다보니깐  이해가 안되고 어려운 부분이 있어서

다시 한번 질문드립니다.


by 마농 [2021.01.24 21:31:16]

With 문 없다고 생각하고, 쿼리 작성 스타일만 보세요.

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