https://school.programmers.co.kr/learn/courses/30/lessons/164670
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 요구사항 분석 : 문제 읽기
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서
중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성
이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고,
전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력
결과는 회원 ID를 기준으로 내림차순 정렬
2) 설계 : 접근 방식
실행 결과로 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호가 필요한데
이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고,
전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해야 하니까
SELECT u.USER_ID,
u.NICKNAME,
CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', u.STREET_ADDRESS2) AS 전체주소,
CONCAT(SUBSTRING(u.TLNO, 1, 3), '-', SUBSTRING(u.TLNO, 4, 4), '-', SUBSTRING(u.TLNO, 8, 4)) AS 전화번호
주소는 CONCAT함수를 이용해서 문자열을 합쳐줌
전화번호는 SUBSTRING함수를 이용해서 문자열을 잘라준 다음 CONCAT를 이용해서 문자열을 합쳐줌
테이블은 FROM USED_GOODS_USER u
조인을 해줘서 중고거래를 한 사람을 찾아줘야함
JOIN (
SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >= 3
) b
서브쿼리를 사용해서 작성자를 그룹화해서 3개 이상 한 사람들만 뽑아줌
SELECT u.USER_ID, u.NICKNAME, CONCAT(u.CITY, ' ', u.STREET_ADDRESS1, ' ', u.STREET_ADDRESS2) AS 전체주소,
CONCAT(SUBSTRING(u.TLNO, 1, 3), '-', SUBSTRING(u.TLNO, 4, 4), '-', SUBSTRING(u.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 u.USER_ID = b.WRITER_ID
ORDER BY u.USER_ID DESC
'알고리즘 > programmers' 카테고리의 다른 글
[programmers] 코딩테스트 고득점 Kit / 해시 / 완주하지 못한 선수 / python (0) | 2023.08.06 |
---|---|
[programmers] 2019 카카오 개발자 겨울 인턴십/ 튜플 / python (0) | 2023.07.03 |
[programmers] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 / SQL (0) | 2023.05.26 |
[programmers] 있었는데요 없었습니다 / SQL (0) | 2023.05.25 |
[programmers] 조건에 맞는 사용자와 총 거래금액 조회하기 / SQL (0) | 2023.05.24 |
댓글