중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과
중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_USERS 테이블.
이 게시판들에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 전체 주소, 전화번호를 조회하는 SQL문을 작성하라는 문제이다!
이때 주소는 시, 도로명 주소, 상세 주소가 함께 출력되게 하고, 전화번호는 000-0000-0000의 형태로 하이픈을 삽입하도록 해야한다
SELECT U.USER_ID
,U.NICKNAME
,전체주소
,전화번호
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
ORDER BY U.USER_ID DESC
SELECT문 작성하기전에 우선적으로 쪼인하고 슥 보면 적을 수 있는 것들을 작성하였다.
GROUP BY U.USER_ID
HAVING COUNT(STATUS = 'DONE') >= 3
그다음으로 게시물 3건 이상 등록한 사용자 조건을 추가하였다.
우선 GROUP BY로 사용자별로 묶은 다음 HAVING을 사용하여 집계조건 추가!
마지막으로 이제 SELECT 조건을 추가할 차례!
하지만 머릿속엔 음,, 어떻게 합치지,,
그렇게 바로 구글링을 해보니 아~~~~ CONCAT함수 쓰면 되구나~~
CONCAT
SELECT CONCAT(칼럼1, 칼럼2) as 합친칼럼
FROM DUAL
문자열을 추가하려면
SELECT CONCAT(칼럼1, '에 ', 칼럼2, '를 추가') as 합친칼럼
FROM DUAL
이제 알았으니 적용을 해 보자!
SELECT U.USER_ID
,U.NICKNAME
,CONCAT(CITY, ' ',STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS 전체주소
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(STATUS = 'DONE') >= 3
ORDER BY U.USER_ID DESC
중간중간 띄워쓰기도 넣어주었다.
마지막으로 전화번호
01000000000 이라는 전화번호에 하이픈을 어떻게 넣으면 될까,,, 고민하다가 도저히 생각나지 않아 또 검색을 해 보았다.
검색해보니까 CONCAT함수와 SUBSTR함수를 응용하면 되는 부분이였다.
SUBSTR으로 앞3자리, 중간4자리, 마지막4자리를 뽑은 다음 사이사이에 하이픈(-)을 넣어서 CONCAT을 하면 되는 것이다
,CONCAT(SUBSTR(TLNO,1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8, 4)) AS 전화번호
뭔가 이렇게 응용하는게 신기했다. 오~~하면서
그래서 최종 쿼리는!!
SELECT U.USER_ID
,U.NICKNAME
,CONCAT(CITY, ' ',STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS 전체주소
,CONCAT(SUBSTR(TLNO,1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8, 4)) AS 전화번호
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(STATUS = 'DONE') >= 3
ORDER BY U.USER_ID DESC
뾰로롱 정답~
이번 문제는 꽤나 인상깊었다!
'SQL' 카테고리의 다른 글
[프로그래머스] [MySQL] LV.3 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (CONCAT, SUBQUERY, JOIN) (0) | 2024.01.04 |
---|---|
[프로그래머스] [MySQL] LV.3 헤비 유저가 소유한 장소 (SUBQUERY) (0) | 2024.01.04 |
[프로그래머스] [MySQL] LV.3 없어진 기록 찾기 (EXCLUSIVE JOIN) (1) | 2024.01.02 |
[프로그래머스] [MySQL] LV.3 조건에 맞는 사용자와 총 거래금액 조회하기 (HAVING) (0) | 2024.01.02 |
[프로그래머스] [MySQL] LV.2 자동차 평균 대여 기간 구하기 (ROUND, DATEDIFF) (0) | 2023.12.29 |