데이터 저장소

[프로그래머스] 조건에 맞는 사용자 정보 조회하기(MYSQL) 본문

SQL

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

im_sso 2023. 7. 21. 12:01

 

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

 

프로그래머스

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

programmers.co.kr

 

📄문제

📝 코드

# INNER JOIN 활용
SELECT 
    U.USER_ID, 
    U.NICKNAME,
    CONCAT_WS(' ',U.CITY,U.STREET_ADDRESS1,U.STREET_ADDRESS2) AS '전체주소',
    CONCAT_WS('-', SUBSTRING(U.TLNO,1,3), SUBSTRING(U.TLNO,4,4), SUBSTRING(U.TLNO,8)) AS '전화번호'
FROM USED_GOODS_USER AS U 
INNER JOIN USED_GOODS_BOARD AS B ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
    HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY U.USER_ID DESC

- CONCAT_WS( ) 함수를 활용하여 문자열을 합침

- SUBSTRING() 함수를 활용하여 전화번호를 나눔

- GROUP BY와 HAVING 구문을 활용하여 중고거래 게시물 3건 이상을 추출함

-> 그룹별 집계된 결과 중 조건을 필터링하기 위해 HAVING절을 사용함

 

CONCAT( ) 과  CONCAT_WS( )의 차이점

- CONCAT( ) : 엑셀의 CONCAT 함수와 같은 기능을 하는 함수

- CONCAT_WS( ) : 특정 구분자와 함께 문자열을 이어주는 함수

                                첫번째 인자에 구분자를 넣어주면 글자마다 구분자로 구분해서 결과값이 나옴

 

📝 다른 풀이

# 서브쿼리 활용
SELECT
    USER_ID,
    NICKNAME,
    CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) AS '전체주소',
    CONCAT(SUBSTR(TLNO,1,3),'-',SUBSTR(TLNO,4,4),'-',SUBSTR(TLNO,8,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
728x90