
SQL 공부중 입니다. ✍✍✍
문제
https://school.programmers.co.kr/learn/courses/30/lessons/164670
풀이
SELECT B.USER_ID, B.NICKNAME, CONCAT(B.CITY,' ',B.STREET_ADDRESS1,' ',B.STREET_ADDRESS2) "전체주소",CONCAT(SUBSTR(B.TLNO,1,3),'-',SUBSTR(B.TLNO,4,4),'-',SUBSTR(B.TLNO,8,4)) "전화번호"
FROM (SELECT WRITER_ID, COUNT(BOARD_ID)
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(BOARD_ID) >= 3) A
INNER JOIN USED_GOODS_USER B
ON A.WRITER_ID = B.USER_ID
ORDER BY B.USER_ID DESC;
중고 거래 게시판 TABLE (USED_GOODS_BOARD)에서 게시물을 3개 이상 등록한 유저의 정보를
유저 정보 TABLE (USED_GOODS_USER)을 JOIN 하여 출력하는 문제였습니다. 앞서 다른 문제 풀이에서 많이 참고했었던 서브쿼리을 활용하여 먼저 게시물을 3개 이상 등록한 유저들을 구한 뒤, 유저들의 정보를 출력하는 방식으로 풀었습니다.🦝🦝🦝
저의 풀이 이외에
SELECT U.USER_ID, U.NICKNAME, CONCAT_WS(" ", U.CITY, U.STREET_ADDRESS1, U.STREET_ADDRESS2) AS "전체주소", CONCAT_WS("-", SUBSTRING(U.TLNO, 1, 3), SUBSTR(U.TLNO, 4, 4), RIGHT(U.TLNO, 4)) AS "전화번호"
FROM USED_GOODS_BOARD B JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY B.WRITER_ID DESC
위와 같이 서브쿼리를 활용하지 않고 GROUP BY한 뒤 HAVING 구문으로 WRITER_ID의 횟수를 COUNT() 하여 조건을 걸어둔 풀이 또한 볼 수 있었습니다.🐵🐵🐵
감사합니다.