본문 바로가기

코딩테스트/SQL - 프로그래머스

SQL 고득점 kit(String, Date) - 조건에 맞는 사용자 정보 조회하기

 

프로그래머스 문제

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

 

풀이

https://school.programmers.co.kr/questions/74925

 

 

 

 

 

좀 생각해볼 만한 부분은 전화번호 사이에 하이픈을 어떻게 넣는가인데,

이 부분에 대해서 2가지 풀이방법으로 풀어 보았다.

 

-- 풀이 1. JOIN 없음, 서브쿼리 / INSERT 사용

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

 

-- 풀이 2. JOIN 없음, 서브쿼리 / REGEXP_REPLACE 사용 

SELECT USER_ID
     , NICKNAME
     , CONCAT(CITY, ' ', STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS '전체주소'
     , REGEXP_REPLACE(TLNO, '(.{3})(.{4})(.{4})', '$1-$2-$3') AS '전화번호'
    FROM USED_GOODS_USER
    WHERE USER_ID IN (
        SELECT WRITER_ID
            FROM USED_GOODS_BOARD
            GROUP BY WRITER_ID
            HAVING COUNT(BOARD_ID) >= 3
        )
    ORDER BY USER_ID DESC

 

 

물론 서브쿼리 대신 JOIN을 써도 된다. 근데 요새 서브쿼리 쓰는 것에 맛 들린 나머지 JOIN을 쓸 생각도 안 헀다.

 

두 풀이의 차이점은 전화번호를 출력할 때 어떤 함수를 썼느냐이다. 그 외엔 같다.

그리고 사실 그 외에 어려운 부분도 없고 해서, 해당 부분만 잘 이해하면 될 것 같다.

 

 

INSERT 함수에 대한 설명은 요기! REGEXP_REPLACE는 귀찮으니까 나중에

[STUDY/SQL, DB] - [MySQL] INSERT 함수

 

[MySQL] INSERT 함수

기본 사용법 - original_string은 원본 문자열. - position은 new_string이 삽입된 후, 문자열 내에서 new_string의 최종 위치(1부터 시작) - length는 original_string에서 new_string 삽입 시 제거될 문자 개수. - new_string

k-wien1589.tistory.com