[문제] [문제 해석 & 조건] 1. 동일 회원의 재구매 상품 건수 필터링 2. 회원 ID 오름차, 상품 ID 내림차 3. 회원 ID, 상품 ID 출력
▶ 해결 POINT :
GROUP BY & HAVING 절 집계 함수 사용
[풀이 과정] 1. 재구매 건수
USER_ID & PRDUCT_ID 기준 그룹바이 후 PK(ONLINE_SALE_ID) 로 카운팅 한 집계값이 2개 이상일 경우 필터링 ( 문제에서 NULL값 허용하지 않으니 COUNT 파라미터로 아스타 받아도 무방)
2. 정렬 기준: 내림차 3. 출력 컬럼 기재
SELECT USER_ID
,PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID,PRODUCT_ID
HAVING COUNT(ONLINE_SALE_ID)>1
ORDER BY 1,2 DESC
Programmers 문제풀이2 (조건에 맞는 사용자 정보 조회하기)
▶ 문제 POINT
다른 테이블 필터링 조건 참조 & 문자열 양식 변경 하기
[문제] [문제 해석 & 조건] 1. 거래 게시물 3건 이상 등록한 유저 조회 2. 주소 연결, 전화번호 양식 맞추기 3. 회원 ID 내림차순
▶ 해결 POINT :
WHERE 절 서브쿼리로 필터링 & 다중 컬럼 연결 & 문자열 분할
[풀이 과정]
1. 게시글 3건 이상 등록한 유저 필터링
유저의 게시글 정보가 있는 USED_GOODS_BOARD 테이블에서 유저로 그룹바이 한뒤 PK(BOARD_ID) 카운 팅하여 3건 이상일때 WRITER_ID 필터링 해줌 (board 테이블도 전체 null 값 허용 안하므로 astar 써도 무방)
출력기준은 USED_GOODS_USER 테이블 이므로 위 조건 WHERE 절 서브쿼리로 연결해서 필터링 (USER 테이블의 USER_ID (PK) = BOARD 테이블의 WRITER_ID(FK) )
2. 전체 주소 구하기
각 컬럼을 CONCAT 으로 연결
3. 전화번호 문자열 분할하여 양식에서 맞춰 출력
CONCAT * SUBSTR 함수 사용
SELECT USER_ID
,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_USER
WHERE USER_ID IN ( SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(BOARD_ID)>=3
)
ORDER BY USER_ID DESC