프로그래머스 문제
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는 귀찮으니까 나중에
'코딩테스트 > SQL - 프로그래머스' 카테고리의 다른 글
SQL 고득점 kit(SELECT) - 멸종위기의 대장균 찾기 (0) | 2024.04.08 |
---|---|
SQL 고득점 kit(String, Date) - 오랜 기간 보호한 동물(2) (1) | 2024.04.07 |
SQL 고득점 kit(String, Date) - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.04.02 |
연도별 대장균 크기의 편차 구하기 (0) | 2024.03.30 |
우유와 요거트가 담긴 장바구니 (0) | 2024.03.30 |