🤷♀️ 문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(- )을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
ℹ️ 테이블
- 중고거래 게시판 정보 (USED_GOODS_BOARD)Column name Type Nullable
BOARD_ID VARCHAR(5) FALSE WRITER_ID VARCHAR(50) FALSE TITLE VARCHAR(100) FALSE CONTENTS VARCHAR(1000) FALSE PRICE NUMBER FALSE CREATED_DATE DATE FALSE STATUS VARCHAR(10) FALSE VIEWS NUMBER FALSE - 중고거래 사용자 정보 (USED_GOODS_USER)Column name Type Nullable
USER_ID VARCHAR(50) FALSE NICKANME VARCHAR(100) FALSE CITY VARCHAR(100) FALSE STREET_ADDRESS1 VARCHAR(100) FALSE STREET_ADDRESS2 VARCHAR(100) TRUE TLNO VARCHAR(20) FALSE
✅ 답안
1. MYSQL .ver
SELECT
WRITER_ID
, NICKNAME
, CONCAT(CITY, ' ', STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS '전체주소'
, CONCAT(SUBSTR(TLNO, 1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8, 4)) AS '전화번호'
FROM (
SELECT
WRITER_ID
, COUNT(*) AS WRITE_CNT
FROM USED_GOODS_BOARD Z
GROUP BY WRITER_ID
) A
LEFT JOIN USED_GOODS_USER B ON (B.USER_ID = A.WRITER_ID)
WHERE 1=1
AND A.WRITE_CNT >= 3
ORDER BY B.USER_ID DESC
;
2. ORACLE .ver
SELECT
WRITER_ID
, NICKNAME
, CITY ||' '||STREET_ADDRESS1||' '||STREET_ADDRESS2 AS "전체주소"
, SUBSTR(TLNO, 1, 3) || '-' || SUBSTR(TLNO, 4, 4) || '-' || SUBSTR(TLNO, 8, 4) AS "전화번호"
FROM (
SELECT
WRITER_ID
, COUNT(*) AS WRITE_CNT
FROM USED_GOODS_BOARD Z
GROUP BY WRITER_ID
) A
LEFT JOIN USED_GOODS_USER B ON (B.USER_ID = A.WRITER_ID)
WHERE 1=1
AND A.WRITE_CNT >= 3
ORDER BY B.USER_ID DESC
;
🌟 CHECK POINT
- 문자열 추출 ⇒ SUBSTR()
SUBSTR(STR, 시작IDX, 추출 갯수) : STR의 시작IDX부터 N개 추출
- 시작IDX가 음수일 경우 ⇒ 뒤에서부터 오른쪽으로 N개 추출
- 추출 갯수가 없을 경우 ⇒ 시작점부터 끝까지 추출
'공부 > CodingTest' 카테고리의 다른 글
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.07.20 |
---|---|
[프로그래머스/SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.07.19 |
[프로그래머스/SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.07.18 |
[프로그래머스/SQL] 진료과별 총 예약 횟수 출력하기 (0) | 2023.07.18 |
[프로그래머스/SQL] 자동차 평균 대여 기간 구하기 (0) | 2023.07.17 |