본문 바로가기
알고리즘/programmers

[programmers]조건에 맞는 사용자 정보 조회하기 / SQL

by seohmoon 2023. 5. 28.

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

 

프로그래머스

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

programmers.co.kr


1) 요구사항 분석 : 문제 읽기

USED_GOODS_BOARD USED_GOODS_USER 테이블에서

중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성

 

이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고,

전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력

 

결과는 회원 ID를 기준으로 내림차순 정렬

 

2) 설계 : 접근 방식

실행 결과로 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호가 필요한데 

이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고,

전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해야 하니까

 

SELECT u.USER_ID,
	u.NICKNAME, 
    CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', u.STREET_ADDRESS2) AS 전체주소,
    CONCAT(SUBSTRING(u.TLNO, 1, 3), '-', SUBSTRING(u.TLNO, 4, 4), '-', SUBSTRING(u.TLNO, 8, 4)) AS 전화번호

주소는 CONCAT함수를 이용해서 문자열을 합쳐줌

전화번호는 SUBSTRING함수를 이용해서 문자열을 잘라준 다음 CONCAT를 이용해서 문자열을 합쳐줌


테이블은 FROM USED_GOODS_USER u


조인을 해줘서 중고거래를 한 사람을 찾아줘야함

JOIN (
    SELECT WRITER_ID
    FROM USED_GOODS_BOARD
    GROUP BY WRITER_ID
    HAVING COUNT(*) >= 3
) b

서브쿼리를 사용해서 작성자를 그룹화해서 3개 이상 한 사람들만 뽑아줌

 

 

SELECT u.USER_ID, u.NICKNAME, CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', 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

댓글