해당날짜에 데이터가 있으면 카운트 하기 0 6 1,055

by xcrew [2022.04.27 17:00:00]


안녕하세요. 디비는 MySQL이구요

move테이블과 move_sub 테이블에 조회되는 기간이 같으면 카운트를 하고 싶습니다.

 

먼저 사용자 테이블이 있습니다.

USER

partner_cd name phone
11 김이지 010-9999-5555
13 박모모 010-1111-3333
20 송아지 010-1234-5678

 

조회되는 날짜에 아래 두테이블에 사용자가 있으면 카운트를 하고 싶습니다.

MOVE

seq partner_cd move_date
1 11 2022-02-21 01:14:00
2 13 2022-02-22 03:14:00
3 20 2022-02-21 08:14:00

MOVE_SUB

seq partner_cd move_date
1 11 2022-02-22 13:14:00
2 20 2022-02-21 09:14:00
3 20 2022-02-21 06:14:00

 

WHERE DATE(move_date)='2022-02-21'로 조회를 한다면

제가 원하는 데이터는 각각의 move_count를 얻고 싶습니다.

partner_cd name phone move_count  
11 김이지 010-9999-5555 1  
20 송아지 010-1234-5678 3  

 

 

by 우주민 [2022.04.27 17:31:35]
SELECT 
  T1.PARTNER_CD 
, T1.NAME
, T1.PHONE
, COUNT(1) AS MOVE_COUNT 
FROM USER T1
INNER JOIN 
(SELECT * FROM MOVE UNION ALL 
 SELECT * FROM MOVE_SUB
) T2
ON T1.PARTNER_CD = T2.PARTNER_CD
WHERE DATE(MOVE_DATE) = '2022-02-21'
GROUP BY 
  T1.PARTNER_CD 
, T1.NAME
, T1.PHONE

MOVE 와 MOVE_SUB 테이블은 형식이 같고, 각 테이블에 JOIN 된 항목 모두를 COUNT 해야 하기에 UNION ALL 처리를 했습니다.

UNION ALL 된 테이블을 단순 JOIN 해서 GROUP BY 한 것이라 내용적으로는 복잡하진 않을거 같습니다.


by xcrew [2022.04.28 10:32:41]

감사합니다. 도움 많이 되었습니다!!!


by 신이만든지기 [2022.04.27 17:49:22]
-- 날짜 조건절
where move_date between str_to_date('2022-02-21', '%Y-%m-%d')
    and subdate(adddate(str_to_date('2022-02-21', '%Y-%m-%d'), INTERVAL 1 DAY), INTERVAL  1 SECOND) 

깨알같은 개선쿼리 ^^;


by xcrew [2022.04.28 10:33:17]

답변 감사드립니다~!!!


by 마농 [2022.04.27 17:53:08]

비효율 : 컬럼을 가공하여 조건을 주지 말고 DATE(move_date)='2022-02-21'
개선 : 컬럼은 그대로 두고 조건을 가공하여 비교하세요.

SELECT a.partner_cd
     , a.name
     , a.phone
     , b.move_cnt
  FROM user a
 INNER JOIN 
       (SELECT partner_cd
             , COUNT(*) move_cnt
          FROM (SELECT partner_cd
                  FROM move
                 WHERE move_date >= '2022-02-21'
                   AND move_date <  '2022-02-21' + INTERVAL 1 DAY
                 UNION ALL
                SELECT partner_cd
                  FROM move_sub
                 WHERE move_date >= '2022-02-21'
                   AND move_date <  '2022-02-21' + INTERVAL 1 DAY
                ) b
         GROUP BY partner_cd
        ) b
    ON a.partner_cd = b.partner_cd
;

 


by xcrew [2022.04.28 10:33:36]

항상 감사합니다~! 마농님!!

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