본문 바로가기
PS/SQL

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

by nyrimmm 2024. 6. 10.

https://school.programmers.co.kr/learn/courses/30/lessons/164670

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명

  • Lv 3 문제
  • 중고거래 게시물을 3건 이상 등록한 사용자 정보 조회
  • 사용자 ID, 닉네임, 전체 주소, 전화번호
  • 전체 주소는 시 + 도로명주소 + 상세주소 , 전화번호 xxx-xxxx-xxxx  형식으로 출력
  • 결과는 회원 ID 기준으로 내림차순 정렬

 

 

 

 

문제 풀이

SELECT USER_ID, 
       NICKNAME, 
       CONCAT(CITY, ' ', STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS '전체주소', 
       CONCAT(LEFT(TLNO, 3), '-', SUBSTR(TLNO, 4, 4) ,'-', RIGHT(TLNO, 4)) AS '전화번호'
FROM USED_GOODS_USER
WHERE USER_ID IN (SELECT WRITER_ID
                  FROM USED_GOODS_BOARD
                  GROUP BY WRITER_ID
                  HAVING COUNT(*) >= 3)
ORDER BY USER_ID DESC;

 

◼️ 서브쿼리로 사용자 ID 별 게시물을 3건 이상 등록한 사용자 ID 구하기

    -  서브쿼리에서 WRITER_ID 칼럼으로 그룹화한 후, WRITER_ID 별로 등록한 게시물이 3건 이상인 WRITER_ID 만 추출

    -  메인쿼리에서 서브쿼리의 WRITER_ID와 일치하는 USER_ID 정보만 추출

 

◼️ CONCAT 함수를 사용해서 전체주소, 전화번호를 주어진 형식에 맞게 출력

    -  CONCAT 함수: 여러 문자열을 입력한 순서대로 합쳐서 반환해주는 함수

    -  전체주소는 'CITY(시) STREET_ADDRESS1(도로명 주소) STREET_ADDRESS2(상세 주소)'  

    -  전화번호는 'xxx-xxxx-xxxx'

    - TLNO 컬럼은 -(하이픈)이 없기 때문에 문자열을 잘라서 사용해야 한다.

       이때, LEFT, RIGHT 함수를 사용해서 양 옆 3자리, 4자리 숫자를 자르고, SUBSTR 함수를 사용해서 중간 4자리 숫자를 자른다.

 

◼️ ORDER BY 로 회원 ID 기준 내림차순으로 정렬