728x90
반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/164670문제 요약
- 테이블 정보:
- USED_GOODS_BOARD: 중고 거래 게시판 정보를 담고 있으며, 게시글 ID, 작성자 ID, 제목, 내용, 가격, 작성일, 상태, 조회수 등으로 구성.
- USED_GOODS_USER: 중고 거래 게시판 사용자 정보를 담고 있으며, 사용자 ID, 닉네임, 시, 도로명 주소, 상세 주소, 전화번호 등으로 구성.
- 목표:
- 중고 거래 게시물을 3건 이상 등록한 사용자의 ID, 닉네임, 전체 주소(시, 도로명 주소, 상세 주소), 그리고 전화번호를 출력.
- 전화번호는 xxx-xxxx-xxxx 형식으로 하이픈을 포함해 출력.
- 결과는 사용자 ID 기준으로 내림차순으로 정렬.
- 제약 조건:
- 전체 주소는 시, 도로명 주소1, 상세 주소를 합쳐서 출력.
- 전화번호는 하이픈을 포함한 형식으로 변환.
- 3건 이상의 게시글을 작성한 사용자만 조회.
풀이 방법
- JOIN
- USED_GOODS_BOARD 테이블, USED_GOODS_USER 테이블을 USER_ID를 기준으로 조인
- 조건인 게시글 수가 3건 이상힌 사용자를 조회하기 위해 GROUP BY, HAVING절 사용
- 전체 주소 : 각각 다른 문자를 합쳐야 하므로 CONCAT 사용
- 전화 번호 : XXX-XXXX-XXXX 형식으로 출력해야 하므로, CONCAT과 SUBSTR 절 사용
정답 코드
-- 코드를 입력하세요
SELECT u.user_id, u.nickname, concat(u.city,' ', u.street_address1, ' ', u.street_address2) as '전체주소', concat(substr(u.tlno, 1, 3), '-', substr(u.tlno, 4, 4), '-', substr(u.tlno, 8, 4)) as tlno
from used_goods_user as u
join used_goods_board as b
on u.user_id = b.writer_id
group by user_id
having count(*)>=3
order by user_id desc
새롭게 배운 내용
- 문자열 중간중간에 다른 문자를 삽입해야 할때(전화번호같은) CONCAT함수와 SUBSTR함수 사용
- SUBSTR 함수는 인자가 (문자열, 문자열 시작지점, 시작지점부터 자르려는 문자 개수)
- COALESCE 함수 : 인수로 전달된 값 중에서 가장 먼저 등장하는 null이 아닌 값 선택
- 문제에서 STREET_ADDRESS2 필드가 NULL일 수도 있고, NULL 인 경우 공백으로 대체
- CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', COALESCE(u.STREET_ADDRESS2, ''))
728x90
반응형
'코딩테스트 > SQL' 카테고리의 다른 글
[MySQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.10.09 |
---|---|
[MySQL] 대장균의 크기에 따라 분류하기 1 (0) | 2024.10.09 |
[MySQL] 부서별 평균 연봉 조회하기 (0) | 2024.10.09 |
[MySQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 (1) | 2024.10.06 |
[MySQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2024.10.06 |