홍동이의 성장일기

[LeetCode] 1158. Market Analysis I (JOIN에 AND 조건 사용하기) 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 1158. Market Analysis I (JOIN에 AND 조건 사용하기)

홍동2 2023. 12. 19. 14:45

 

Market Analysis I - LeetCode

Can you solve this real interview question? Market Analysis I - Table: Users +----------------+---------+ | Column Name | Type | +----------------+---------+ | user_id | int | | join_date | date | | favorite_brand | varchar | +----------------+---------+ u

leetcode.com

 

SELECT u.user_id as buyer_id
        , u.join_date
        , IFNULL(COUNT(o.order_date), 0) AS orders_in_2019
FROM users as u
    LEFT JOIN orders as o
    ON u.user_id = o.buyer_id 
    AND YEAR(o.order_date) = '2019'
GROUP BY 1

 

 

💡 문제 풀이

 

원하는 컬럼이 들어있는 users와 orders 테이블을 Join해줍니다.

SELECT u.user_id as buyer_id
        , u.join_date
        , o.order_date
FROM users as u
    LEFT JOIN orders as o
    ON u.user_id = o.buyer_id 
    AND YEAR(o.order_date) = '2019'

 

  • buyer_id를 불러올 때 orders 테이블의 buyer_id를 바로 불러오면 오류가 납니다. users의 user_id로 가져와준 후, 이름을 buyer_id로 변경해주어야 합니다. ----> 왤까?
  • JOIN을 할 때 AND를 이용하여 order_date의 연도가 2019년인 행만 불러와줍니다.

좌: AND 조건없이 JOIN 했을 때 / 우: AND 조건 넣어서 JOIN 했을 때

 

➡️ 이런 방법은 처음봐서 뤼튼에게 물어봤습니다.

 

💁 MySQL에서 JOIN 조건에 AND 조건을 사용하는 이유는 두 개의 테이블을 결합할 때, 추가적인 조건을 지정하기 위해서입니다. AND 조건은 두 개의 조건이 모두 참일 때만 결과를 반환합니다. JOIN은 관련된 테이블의 열을 기준으로 행을 결합하는 작업입니다. 예를 들어, 테이블 A와 테이블 B를 JOIN할 때, ON 절에 AND 조건을 사용하면 두 개의 조건이 모두 충족되어야만 JOIN이 이루어집니다. 이를 통해 두 테이블 간의 관계를 명확하게 정의할 수 있습니다.

    AND 조건을 사용하는 JOIN의 원리는 다음과 같습니다. 먼저, 첫 번째 테이블과 두 번째 테이블 사이에서 일치하는 열을 찾습니다. 그리고 ON 절에 지정된 추가적인 조건을 사용하여 두 개의 조건을 동시에 만족하는 행만을 선택합니다. 이렇게 선택된 행들로 새로운 결과 테이블을 생성하고 반환합니다. AND 조건을 사용하는 JOIN은 데이터의 필터링이나 조건에 따른 정확한 결과를 얻기 위해 매우 유용합니다. 이를 통해 복잡한 데이터를 효율적으로 처리하고 원하는 결과를 얻을 수 있습니다.

 

IFNULL(COUNT(o.order_date), 0) AS orders_in_2019

 

IFNULL을 사용하여 order_date를 count할 때 NULL의 경우는 0으로 계산될 수 있게 해줍니다.

728x90
Comments