[프로그래머스] SQL Lv.3 - 조건에 맞는 사용자 정보 조회하기
by Rev_한 테이블에서 특정 조건을 찾아 다른 테이블의 값들을 SELECT 하는 문제였다.
나는 간단하게 GROUP BY 와 HAVING 절을 활용하였다.
-- 중고 거래 게시물을 3건 이상 등록한 사용자의
-- 사용자 ID, 닉네임, 전체주소(도로명주소 + 상세주소), 전화번호(하이픈 추가)
-- 회원 ID를 기준으로 내림차순 정렬
-- 중고거래 게시판 테이블
SELECT T1.USER_ID, T1.NICKNAME, T1.CITY || ' ' || T1.STREET_ADDRESS1 || ' ' || T1.STREET_ADDRESS2 AS 전체주소
,SUBSTR(T1.TLNO, 1, 3) || '-' || SUBSTR(T1.TLNO, 4, 4) || '-' || SUBSTR(T1.TLNO, 8, 4) AS 전화번호
FROM USED_GOODS_USER T1
INNER JOIN USED_GOODS_BOARD T2
ON T1.USER_ID = T2.WRITER_ID
GROUP BY T1.USER_ID, T1.NICKNAME, T1.CITY
, T1.STREET_ADDRESS1, T1.STREET_ADDRESS2, T1.TLNO
HAVING COUNT(T2.BOARD_ID) >= 3
ORDER BY T1.USER_ID DESC
- USED_GOODS_USER 테이블과 USED_GOODS_BOARD 테이블을 각각 USER_ID = WRITER_ID로 JOIN 한다.
- 사용자ID, 닉네임, 전체주소, 전화번호 SELECT
- SELECT 된 값들을 GROUP BY 후 HAVING 절을 통해 BOARD_ID 개수가 3건 이상인 값만 조회
이러한 순서로 문제를 풀어 나갔다.
GROUP BY 에는 조건을 어떻게 걸어야 하는지 아직 헷갈린다..
다른 풀이
- IN절을 사용한 방법
SELECT 절에는 USED_GOODS_USER 테이블의 컬럼밖에 사용되지 않는다.
이 점을 활용하여 JOIN을 사용하지 않고, WHERE절에 서브쿼리를 사용하여 사용자별 게시글의 개수를 그룹핑 하여 조건을 걸어줄 수 있다.
SELECT USER_ID, NICKNAME, CITY || ' ' || STREET_ADDRESS1 || ' ' || STREET_ADDRESS2 AS 전체주소
,SUBSTR(TLNO, 1, 3) || '-' || SUBSTR(TLNO, 4, 4) || '-' || SUBSTR(TLNO, 8, 4) AS 전화번호
FROM USED_GOODS_USER
WHERE USER_ID IN (SELECT A.USER_ID
FROM USED_GOODS_USER A
INNER JOIN USED_GOODS_BOARD B
ON A.USER_ID = B.WRITER_ID
GROUP BY A.USER_ID
HAVING COUNT(*) >= 3)
ORDER BY USER_ID DESC
확실히 처음부터 JOIN 조건을 걸어서 그룹핑 하는 것보다는 IN 절을 통하여 조건을 찾아주는 것이 훨씬 효율적일 것 같다.
SELECT A.USER_ID
FROM USED_GOODS_USER A
INNER JOIN USED_GOODS_BOARD B
ON A.USER_ID = B.WRITER_ID
GROUP BY A.USER_ID
HAVING COUNT(*) >= 3
서브쿼리 안의 쿼리를 살펴보면 ..
문제를 보면 게시글(BOARD_ID)의 개수를 카운팅해야할 것 같지만
USER_ID만 그룹핑하여 세주고 있다.
USER_ID 하나당 여러 개의 게시글을 가질 수 있는 1:N 관계이기 때문에 가능한 것 같다.
각각의 KEY 값으로 JOIN하고, USER_ID를 GROUP BY 하면, 자연스럽게 이용자 당 게시글의 개수를 셀 수 있다.
'PS > SQL' 카테고리의 다른 글
[프로그래머스] SQL Lv.2 - 자동차 평균 대여 기간 구하기 (1) | 2024.03.23 |
---|---|
[프로그래머스] SQL Lv.3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.02.19 |
[프로그래머스] SQL Lv.2 - 루시와 엘라 찾기 (0) | 2024.01.29 |
[프로그래머스] SQL Lv.2 - 동명 동물 수 찾기(Oracle) (0) | 2024.01.15 |
[프로그래머스] SQL Lv.2 - 고양이와 개는 몇마리 있을까(Oracle) (1) | 2024.01.10 |
블로그의 정보
Hi Rev
Rev_