[프로그래머스, SQL] 조건에 맞는 사용자 정보 조회하기

takeon·2024년 1월 3일
0

SQL

목록 보기
4/11
post-thumbnail

난이도: Lv. 3
https://school.programmers.co.kr/learn/courses/30/lessons/164670

❄️문제 설정

두 테이블 USED_GOODS_BOARDUSED_GOODS_USER가 존재

  1. USED_GOODS_BOARD
  • Columns: BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS
  1. USED_GOODS_USER
  • Columns: USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO

❄️문제

위의 두 테이블에서 중고거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL 쿼리를 작성. 사용자 ID를 기준으로 내림차 정렬.

  • 전체주소: CITY, STREET_ADDRESS1, STREET_ADDRESS2를 함께 출력
  • 전화번호: xxx-xxxx-xxxx와 같이 -을 함께 출력

❄️문제 풀이

  • 두 테이블을 join하여 사용해야 한다.
  • 전체 주소를 나타낼 CITY, STREET_ADDRESS1, STREET_ADDRESS2는 각각 다른 column이므로 concat을 이용해서 연결해 주어야 한다.
  • 전화번호의 경우도 TLNO에는 - 없이 저장되어 있으므로 Substring을 사용해 숫자를 분해하고, concat을 사용해서 하이픈과 함께 연결해준다.
  • 게시물을 3건 이상 등록한 사용자라는 조건은 countgroup by, having을 사용해서 구현한다.
select USER_ID, NICKNAME, 
	CONCAT(CITY, " ", STREET_ADDRESS1, " ", STREET_ADDRESS2) as "전체주소", 
    CONCAT(LEFT(TLNO, 3), "-", SUBSTRING(TLNO, 4, 4), "-", RIGHT(TLNO, 4)) as "전화번호"
from USED_GOODS_BOARD B
join USED_GOODS_USER U
on B.WRITER_ID = U.USER_ID
group by USER_ID
having count(TITLE)>=3
order by 1 desc

❄️기억할 부분

  1. concat의 사용
  2. substring의 사용

0개의 댓글