2026. 5. 3. 16:28ㆍ프로그래머스 SQL
문제 설명
다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_USER 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.

USED_GOODS_USER 테이블은 다음과 같으며 USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO는 각각 회원 ID, 닉네임, 시, 도로명 주소, 상세 주소, 전화번호를 의미합니다.

문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
사고 해결 과정
문제조건 = 게시물을 3건 이상 올린 사용자만 뽑을 것, 전체 주소는 시+도로명+상세주소를 이어 붙여 출력,
전화번호는 010-XXXX-XXXX 형태로 하이픈을 넣을 것
JOIN이랑 GROUP BY까지는 금방 생각났는데, 헷갈렸던 게 두 가지였다.
1. WHERE vs HAVING
처음에 게시물 숫자 조건 WHERE 함수를 썼다가 오류가났다. COUNT 같은 집계 함수 조건은 HAVING 에 써야 한다는 걸 이번에 다시 배웠다.
2.전화번호 자르기
SUBSTRING(TLNO, 1, 3)이 1번째 자리부터 3글자라는 건 알았는데 위치 계산을 틀렸다. SQL은 파이썬이랑 달리 인덱스가0이아니고 1부터 시작해서 헷갈리는 것 같다.
그러고 나서 주소는 CONCAT 으로 공백을 삽입해서 이어붙이고 답을 제출했다.
답변
SELECT
u.USER_ID,
u.NICKNAME,
CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', IFNULL(u.STREET_ADDRESS2, '')) AS 전체주소,
CONCAT(
SUBSTRING(u.TLNO, 1, 3), '-',
SUBSTRING(u.TLNO, 4, 4), '-',
SUBSTRING(u.TLNO, 8, 4)
) AS 전화번호
FROM USED_GOODS_USER u
JOIN (
SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >= 3
) b ON u.USER_ID = b.WRITER_ID
ORDER BY u.USER_ID DESC;
답을 제출 하는 과정에서 IFNULL(u.STREET_ADDRESS2, '') 이코드를 사용하지 않았더니 계속 런타임 오류가 발생해서 애 먹었다. STREET_ADDRESS2 컬럼이 NULL 허용인데, MySQL에서는 CONCAT 안에 NULL이 하나라도 끼면 전체 결과가 NULL이 돼버려서 IFNULL 로 STREET_ADDRESS2가 NULL이면 빈 문자열 ' '로 대체 이문구를 넣어주지않으면 계속 오류가 났다.
아직 lv3는 혼자 생각하고 공부하기에는 어려운 느낌이다.. 더 풀어보고 공부 해야겠다.
'프로그래머스 SQL' 카테고리의 다른 글
| 6. 프로그래머스 SQL lv.3 ( 조건에 맞는 사용자와 총 거래금액 조회하기 ) (0) | 2026.05.08 |
|---|---|
| 5.프로그래머스 SQL lv2.5 (다양한 음식을 즐긴 미식가 찾기 ai생성문제) (0) | 2026.05.04 |
| 3.프로그래머스 SQL lv2 (중복제거하기) (0) | 2026.05.03 |
| 2.프로그래머스 SQL lv2 (재구매가 일어난 상품과 회원 리스트 구하기) (0) | 2026.04.28 |
| 1.프로그래머스 SQL lv.3 (자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기) (0) | 2026.04.27 |