🤔 문제
다음은 중고 거래 게시판 정보를 담은 `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를 기준으로 내림차순 정렬해주세요.
예시
`USED_GOODS_BOARD` 테이블이 다음과 같고
`USED_GOODS_USER` 테이블이 다음과 같을 때
SQL을 실행하면 다음과 같이 출력되어야 합니다.
💻 나의 풀이
SELECT
u.USER_ID,
u.NICKNAME,
CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', u.STREET_ADDRESS2) AS 전체주소,
CONCAT(LEFT(u.TLNO, 3), '-', SUBSTRING(u.TLNO, 4, 4), '-', RIGHT(u.TLNO, 4)) AS 전화번호
FROM USED_GOODS_BOARD b
JOIN USED_GOODS_USER u ON b.WRITER_ID=u.USER_ID
GROUP BY b.WRITER_ID
HAVING COUNT(b.BOARD_ID) >= 3
ORDER BY 1 DESC;
결과
✅ 핵심 정리
이번 문제는 문제 자체가 어렵다기 보다는 문자열 관련 함수를 얼마나 알고있고, 이를 자유자재로 활용할 수 있는가가 관건이었던 것 같다.
정답 풀이의 핵심이 되었던 문자열을 합치는 `CONCAT()` 함수와 문자열을 슬라이싱하는 `SUBSTRING()`, `LEFT()`, `RIGHT()`, `MID()` 함수에 대해서 정리해보고자 한다.
문자열 합치기 : CONCAT
CONCAT(값1, 값2, ..., 값n)
값1 부터 값n을 공백 없이 그대로 합쳐준다.
문자열 슬라이싱 : SUBSTRING(MID, SUBSTR), LEFT, RIGHT
1. SUBSTRING (=MID, SUBSTR)
SUBSTRING(문자열, 시작인덱스, 자를길이) -- 인덱스는 맨 처음부터 1
-- 다음 함수도 SUBSTRING과 동의어이다.
MID(문자열, 시작인덱스, 자를길이)
SUBSTR(문자열, 시작인덱스, 자를길이)
대상이되는 `문자열`에 대해서 `시작인덱스`부터 `자를길이`만큼 슬라이싱하여 반환한다.
2. LEFT
LEFT(문자열, 자를길이)
대상이되는 `문자열`에 대해서 가장 왼쪽부터 `자를길이`만큼 슬라이싱하여 반환한다.
3. RIGHT
RIGHT(문자열, 자를길이)
대상이되는 `문자열`에 대해서 가장 오른쪽부터 `자를길이`만큼 슬라이싱하여 반환한다.
'취업준비 > 코딩테스트 문제 풀이' 카테고리의 다른 글
[프로그래머스 SQL 코딩테스트 연습] Lv3. 대장균의 크기에 따라 분류하기1 (MySQL) (0) | 2024.08.05 |
---|---|
[프로그래머스 SQL 코딩테스트 연습] Lv3. 오랜 기간 보호한 동물(1) (MySQL) (0) | 2024.08.02 |
[프로그래머스 SQL 코딩테스트 연습] Lv3. 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기(MySQL) (0) | 2024.07.30 |
[프로그래머스 SQL 코딩테스트 연습] Lv3. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기(MySQL) (1) | 2024.07.27 |
[프로그래머스 SQL 코딩테스트 연습] Lv3. 있었는데요 없었습니다 (MySQL) (3) | 2024.07.24 |