250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- mysql
- leetcode
- 셀프조인
- 약수구하기
- sql50
- 프로그래머스문풀
- 프로그래머스
- 그로스해킹
- leetcode문풀
- 데이터리안
- 티스토리챌린지
- with절
- 데벨챌
- SQL고득점KIT
- 윈도우함수
- 데이터리안실전반
- 위키독스
- 문풀
- 파이썬
- 데이터리안넥스트레벨챌린지
- 활성사용자수
- 오블완
- SQL
- join
- levle1
- 파이썬문풀
- SQL테스트
- 서브쿼리
- sql문풀
- 코테준비
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 전화번호 '-'기호 넣기 본문
728x90
출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : 그룹별 조건에 맞는 식당 목록 출력하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/164670
문제(일부): 리뷰가 3개 이상인 작성자 정보 조회하기
0. CONCAT, SUBSTRING 이해하기
CONCAT은 인수들을 연결하는 함수SUBSTRING(컬럼, 시작위치, 길이): 컬럼에서 시작위치부터 지정한 길이만큼 출력
1. 서브쿼리 활용하기
1) WITH절에서 리뷰를 3개 이상 남긴 ID를 선택
2) 메인쿼리에서 CONCAT_WS로 공백을 넣어 주소를 합침
SUBSTRING으로 전화번호의 3 / 4 / 4자리를 추출하고 CONCAT으로 연결
3) WHERE절에서 서브쿼리로 리뷰가 3개 이상인 ID를 필터링
WITH CNT_REVIEW AS(
SELECT WRITER_ID
,COUNT(WRITER_ID) CNT
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING CNT>= 3 )
SELECT USER_ID
,NICKNAME
,CONCAT_WS(' ',CITY,STREET_ADDRESS1, STREET_ADDRESS2) AS 전체주소
,CONCAT(SUBSTRING(TLNO, 1, 3), '-', -- 앞자리 (010)
SUBSTRING(TLNO, 4, 4), '-', -- 가운데자리 (1234)
SUBSTRING(TLNO, 8, 4)) AS 전화번호 -- 뒷자리 (5678)
FROM USED_GOODS_USER
WHERE USER_ID IN (SELECT WRITER_ID FROM CNT_REVIEW) -- 리뷰 3개 이상인 아이디
ORDER BY USER_ID DESC
2. JOIN 활용하기
1) CONCAT과 SUBSTRING을 사용하는 점은 1번과 동일
2) 서브쿼리 대신 INNER JOIN을 사용
SELECT u.USER_ID
, u.NICKNAME
, CONCAT(u.CITY, ' ', u.STREET_ADDRESS1 , ' ',u.STREET_ADDRESS2) AS 전체주소
, CONCAT(
SUBSTRING(u.TLNO, 1, 3), "-", -- 앞자리 (010)
SUBSTRING(u.TLNO, 4, 4), "-", -- 가운데자리 (1234)
SUBSTRING(u.TLNO, 8) -- 뒷자리 (5678)
) AS 전화번호
FROM USED_GOODS_BOARD AS b
INNER JOIN USED_GOODS_USER AS u
ON b.WRITER_ID = u.USER_ID
GROUP BY b.WRITER_ID
HAVING COUNT(b.WRITER_ID) >= 3
ORDER BY u.USER_ID DESC
728x90
'SQL > SQL문풀' 카테고리의 다른 글
[MY SQL] 재귀쿼리를 활용하여 특정 세대 찾기 (0) | 2024.05.08 |
---|---|
[MY SQL] 기간별 할인율 가격에 반영하기 (0) | 2024.05.04 |
[MY SQL] 특정 카테고리의 스킬을 보유한 개발자 조회 (0) | 2024.04.28 |
[MY SQL] 특정년도에 가입한 회원 중 구매한 회원 수, 비율 구하기 (0) | 2024.04.28 |
[MY SQL] DENSE_RANK를 활용하여 리뷰를 가장 많이 작성한 회원의 리뷰 조회 (0) | 2024.04.27 |