문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
내 생각
처음에는 USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 라길래 JOIN으로 풀었는데 틀렸다,,
그리고 다시 풀어보니 JOIN까지는 필요없었다 ! USED_GOODS_USER에서 출력 대부분을 하고, USED_GOODS_BOARD 테이블에서는 '게시물을 3건 이상 등록한' 이라는 조건만 필요했다 !
1. SELECT 사용자 ID, 닉네임, 전체주소, 전화번호를 조회
- 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력 : CONCAT()
- 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력 : CONCAT()
2. USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자 : 서브쿼리(IN)
3. 결과는 회원 ID를 기준으로 내림차순 정렬
내 코드
SELECT USER_ID, NICKNAME,
CONCAT(CITY, ' ', STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS 전체주소,
CONCAT(SUBSTRING(TLNO, 1, 3), '-', SUBSTRING(TLNO, 4, 4), '-', SUBSTRING(TLNO, 8)) AS 전화번호
FROM USED_GOODS_USER
WHERE USER_ID IN (SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >= 3)
ORDER BY USER_ID DESC
** CONCAT()
: 둘 이상의 문자열을 입력한 순서대로 합쳐 반환해주는 함수
CONCAT(문자열1, 문자열2 [, 문자열3 ...])
예제 )
SELECT CONCAT('1', '일', '2', '이') AS 칼럼명;
칼럼명 |
1일2이 |
예제)
id | name |
1 | 이름1 |
2 | 이름2 |
SELECT CONCAT(id, '-', name) AS 칼럼명2;
결과)
칼럼명2 |
1-이름 2-이름 |
'Algorithm > 코딩테스트 (SQL)' 카테고리의 다른 글
[프로그래머스][GROUP BY] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (MySQL) (0) | 2024.01.10 |
---|---|
[프로그래머스][SELECT] 조건에 맞는 회원수 구하기 (MySQL) (2) | 2024.01.05 |
[프로그래머스][String, Date] 루시와 엘라 찾기 (MySQL) (0) | 2023.12.29 |
[프로그래머스][GROUP BY] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.12.27 |
[프로그래머스][GROUP BY] 카테고리 별 도서 판매량 집계하기 (0) | 2023.12.24 |
댓글