최대 1 분 소요

문제 링크

정답

-- USED_GOODS_BOARD: BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS
-- USED_GOODS_USER: USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO

WITH USER_BOARD_COUNT AS (
    SELECT     
        WRITER_ID,
        COUNT(WRITER_ID) AS CNT
    FROM USED_GOODS_BOARD
    GROUP BY WRITER_ID
)
    
SELECT 
    T1.USER_ID,
    T1.NICKNAME,
    CONCAT(T1.CITY, ' ', T1.STREET_ADDRESS1, ' ', T1.STREET_ADDRESS2) AS '전체 주소',
    CONCAT(SUBSTRING(T1.TLNO, 1, 3), '-', SUBSTRING(T1.TLNO, 4, 4), '-', SUBSTRING(T1.TLNO, 8, 4)) AS TLNO
FROM USED_GOODS_USER AS T1
JOIN USER_BOARD_COUNT AS T2
    ON T1.USER_ID = T2.WRITER_ID
WHERE T2.CNT >= 3
ORDER BY 1 DESC;

✅ Point

  • WRITER_ID 별 작성한 게시물의 수 CTE 선언: USER_BOARD_COUNT
  • USER_BOARD_COUNTUSED_GOODS_USER을 JOIN
    • 동일한 USER_ID
  • CONCAT 과 SUBSTRING을 활용하여 전화번호 xxx-xxxx-xxxx 형식으로 통일
    • FORMAT(TLNO, '###-####-####')을 시도했으나, 전화번호가 아닌 큰 정수로 인식해서 위 방법으로 시도함
      • FORMAT은 숫자/날짜를 일정한 string 형식으로 반환하는 함수
      • 예) 010321129391,032,112,939 로 format하는 문제 발생