WITH A AS(
SELECT UB.BOARD_ID,
UB.WRITER_ID AS UB_WRITER,
TITLE,
UB.CONTENTS AS UB_CONTENTS,
PRICE,
UB.CREATED_DATE AS UB_CREATED_DATE,
STATUS,
VIEWS,
REPLY_ID,
UR.WRITER_ID AS UR_WRITER,
UR.CONTENTS AS UR_CONTENTS,
UR.CREATED_DATE AS UR_CREATED_DATE
FROM USED_GOODS_BOARD UB RIGHT JOIN USED_GOODS_REPLY UR ON (UB.BOARD_ID = UR.BOARD_ID)
ORDER BY BOARD_ID
)
SELECT TITLE, BOARD_ID, REPLY_ID, UR_WRITER AS WRITER_ID, UR_CONTENTS AS CONTENTS,
TO_CHAR(UR_CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE
FROM A
WHERE EXTRACT(YEAR FROM UB_CREATED_DATE) = 2022
AND EXTRACT(MONTH FROM UB_CREATED_DATE) = 10
ORDER BY UR_CREATED_DATE, TITLE
;
<내용 정리>
1) TABLE1 LEFT JOIN TABLE2 ON (TABLE1.~ = TABLE2.~)
-> OUTER JOIN을 하면 기준이 되는 테이블(LEFT면 LEFT에 적히는 TABLE1)의 값은 모두 출력.
-> 이때, RIGHT(TABLE2)의 값이 LEFT의 특정 행에 안 붙을 수 있음. 이때는 NULL값으로 처리되는 듯?
2) WITH A AS (SUB-Q)
3) TO_DATE
-> TO_DATE하면 무조건 뒤에 시간표시가 같이 따라온다.
-> 따라서 'YYYY-MM-DD'형태로 하고 싶으면 TO_CHAR( ) 형태로 바꿔줘야 한다.
4) EXTRACT함수
-> EXTRACT(MONTH(YEAR도 OK) FROM 'DATE 형 열 이름') = 숫자
-> 좀 더 직관적인듯
<CHAT GPT가 알려주는 간결한 형태>
WITH A AS (
SELECT
UB.BOARD_ID,
UB.WRITER_ID AS UB_WRITER,
TITLE,
UB.CONTENTS AS UB_CONTENTS,
PRICE,
UB.CREATED_DATE AS UB_CREATED_DATE,
STATUS,
VIEWS,
REPLY_ID,
UR.WRITER_ID AS UR_WRITER,
UR.CONTENTS AS UR_CONTENTS,
UR.CREATED_DATE AS UR_CREATED_DATE
FROM USED_GOODS_BOARD UB
RIGHT JOIN USED_GOODS_REPLY UR ON (UB.BOARD_ID = UR.BOARD_ID)
)
SELECT
TITLE,
BOARD_ID,
REPLY_ID,
UR_WRITER AS WRITER_ID,
UR_CONTENTS AS CONTENTS,
TO_CHAR(UR_CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE
FROM A
WHERE TO_CHAR(UB_CREATED_DATE, 'YYYY-MM') = '2022-10'
ORDER BY UR_CREATED_DATE, TITLE;
위의 쿼리에서 변경된 사항은 다음과 같습니다:
- WITH 절에 ORDER BY를 제거하여 중복 정렬을 제거합니다.
- WHERE 절에서 EXTRACT 함수 대신에 TO_CHAR 함수를 사용하여 년도와 월을 문자열로 변환하고 비교합니다.
- WHERE 절에서 UB_CREATED_DATE 대신에 UR_CREATED_DATE를 사용하여 올바른 필드를 참조합니다.
이렇게 수정하면 쿼리가 좀 더 간결해지고 중복을 줄일 수 있습니다.
'DataEngineering' 카테고리의 다른 글
SQL 프로그래머스 문제 - 상위 n개 레코드 (0) | 2024.05.13 |
---|---|
SQL 프로그래머스 문제 - 강원도에 위치한 생산공장 목록 출력하기 (0) | 2024.05.13 |
SQL 프로그래머스 문제 - 인기있는 아이스크림 (0) | 2024.05.13 |
SQL 프로그래머스 문제 - 자동차 대여 기록에서 장기/단기 대여 구분하기 (0) | 2024.05.13 |
프로그래머스 SQL 문제 - 특정 옵션이 포함된 자동차 리스트 구하기 (0) | 2024.05.13 |