우당탕탕 개발일지
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (MySQL, Level.4) 본문
문제
ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요.
결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
결과 예시
풀이
날짜 함수를 까먹었다...
구글링해서 날짜에서 월과 년도를 구했다
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
from ONLINE_SALE
where month(SALES_DATE) = 3 and year(SALES_DATE) = 2022
날짜 출력
원하는 값 | 함수 | 결과 |
날짜 | date(now()) | 2024-02-04 |
년 | year(now()) | 2024 |
월 | month(now()) | 2 |
일 | day(now()) | 4 |
시간 | time(now()) | 13:10:21 |
시 | hour(now()) | 13 |
분 | minute(now()) | 10 |
초 | secound(now()) | 21 |
Join의 종류, UNION
오프라인과 온라인을 합쳐야 하니 join를 사용하여야 한다고 생각했다...!
하지만 join를 사용하면 테이블 + 테이블이 된다... 그치만 나는 동일한 컬럼에 서로 다른 테이블의 데이터를 출력하고 싶은 상황이다
이때 사용해야 하는 것이 UNION이다
UNION를 사용할 때에는 select하는 컬럼이 동일하여야 한다!!
select 컬럼명1, 컬럼명2, 컬럼명3 from 테이블1
union
select 컬럼명1, 컬럼명2, 컬럼명3 from 테이블2
참고
[MYSQL] 📚 테이블 조인(JOIN) - 그림으로 알기 쉽게 정리
SQL JOIN JOIN은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해 주는, Relation Database 에서 가장 많이 쓰이는 녀석이다. (INNER) JOIN 조인하는
inpa.tistory.com
1차시도
그래서 나온 SQL문이 아래이다.
하지만 계속 틀렸다고 나옴... ㅠㅠ
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
from ONLINE_SALE
where month(SALES_DATE) = 3 and year(SALES_DATE) = 2022
union
SELECT SALES_DATE, PRODUCT_ID, NULL as USER_ID, SALES_AMOUNT
from OFFLINE_SALE
where month(SALES_DATE) = 3 and year(SALES_DATE) = 2022
order by SALES_DATE, PRODUCT_ID, USER_ID
결과 예시와 비교하니 날짜 형식이 다른것을 깨달음...
2차시도
날짜 포멧하여 다시 시도했지만 오류 발생...
3차시도
뭐가 문제인지 한참 이해못하다가 날짜 포맷한거 컬럼명 지정 안해준것을 깨달음 ㅠㅠ
컬럼명 지정해주고 성공!
최종 정답
SELECT DATE_Format(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
from ONLINE_SALE
where month(SALES_DATE) = 3 and year(SALES_DATE) = 2022
union
SELECT DATE_Format(SALES_DATE, '%Y-%m-%d') as SALES_DATE, PRODUCT_ID, NULL as USER_ID, SALES_AMOUNT
from OFFLINE_SALE
where month(SALES_DATE) = 3 and year(SALES_DATE) = 2022
order by SALES_DATE, PRODUCT_ID, USER_ID
프로그래머스 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131537
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 없어진 기록 찾기 (MySQL, Level.3) (0) | 2025.02.04 |
---|---|
[프로그래머스] 가격이 제일 비싼 식품의 정보 출력하기 (MySQL, Level.2) (1) | 2025.02.04 |
[프로그래머스] NULL 처리하기 (MySQL, Level.2) (0) | 2025.02.03 |
[프로그래머스] 성격 유형 검사하기 (Java, Level.1) (0) | 2024.07.10 |
[프로그래머스] 개인정보 수입 유효기간 (Java, Level.1) (0) | 2024.07.09 |