Lv3. 조건에 맞는 사용자 정보 조회하기 (MySQL)
링크: https://school.programmers.co.kr/learn/courses/30/lessons/164670
내가 작성한 코드
-- 풀이1
SELECT U.USER_ID, U.NICKNAME
,CONCAT_WS(' ', CITY, STREET_ADDRESS1, STREET_ADDRESS2) AS '전체주소'
,CONCAT_WS('-', SUBSTR(TLNO, 1, 3), SUBSTR(TLNO, 4, 4), SUBSTR(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 B.WRITER_ID = U.USER_ID
ORDER BY U.USER_ID DESC;
-- 풀이2 (정규표현식(REGEXP_REPLACE))
-- (.{3}) : 3글자 그룹, (.{4}) : 4글자 그룹, (.{4}) : 마지막 4글자 그룹
SELECT U.USER_ID, U.NICKNAME
,CONCAT_WS(' ', CITY, STREET_ADDRESS1, STREET_ADDRESS2) AS '전체주소'
,REGEXP_REPLACE(U.TLNO, '(.{3})(.{4})(.{4})', '$1-$2-$3') AS '전화번호'
FROM USED_GOODS_USER U
JOIN (SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >= 3) B
ON B.WRITER_ID = U.USER_ID
ORDER BY U.USER_ID DESC;
Oracle
-- Oracle
SELECT U.USER_ID, U.NICKNAME
,U.CITY || ' ' || U.STREET_ADDRESS1 || ' ' || U.STREET_ADDRESS2 AS "전체주소"
,REGEXP_REPLACE(U.TLNO, '(.{3})(.{4})(.{4})', '\1-\2-\3') 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
Oracle vs MySQL
- 문자열 연결
- CONCAT (MySQL)
- || (Oracle)
- 정규표현식 참조
- \ (Oracle)
- $ (MySQL)
'코딩테스트' 카테고리의 다른 글
| [26.02.23 코테(MySQL)]-연도별 대장균 크기의 편차 구하기 (0) | 2026.02.23 |
|---|---|
| [26.02.20 코테(MySQL/Oracle)]-자동차 평균 대여 기간 구하기 (0) | 2026.02.20 |
| [26.02.13 코테(MySQL)]-조건에 맞는 개발자 찾기 (0) | 2026.02.13 |
| [26.02.12 코테(MySQL)]-대장균의 크기에 따라 분류하기 1 (0) | 2026.02.12 |
| [26.02.11 코테(MySQL/Oracle)]-특정 세대의 대장균 찾기 (0) | 2026.02.11 |