🧫 문제 분석
✔️ 출처
📖 문제

살짝 고민했던 SQL문제 매우 재밌고 흥미롭다.
첫 번째로 중고 거래 게시물을 3건 이상 등록한 사용자를 필터링해야한다.
서브 쿼리로 작성자 ID 를 그룹핑후 HAVING절에서 COUNT로 작성 글이 3개 이상인 WRITER_ID를 구한다.
IN절로 서브쿼리에서 구한 WRITER_ID 중에서 중고 거래 이용자의 ID값이 있다면,
해당 유저는 중고 거래 게시글을 3건 이상 등록한 사용자이다.
이부분만 잘 파악하면 쉽게 해결 가능하다.
🔅 문제 풀이
-- UGB 와 UGU 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자ID, 닉네임, 전체 주소, 전화번호를 조회
-- 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력
-- 전화번호 -삽입
-- 결과는 회원ID 기준 내림차순 정렬
SELECT UGU.USER_ID,
UGU.NICKNAME,
CONCAT(UGU.CITY, ' ', UGU.STREET_ADDRESS1, ' ', STREET_ADDRESS2) AS 전체주소,
CONCAT(SUBSTRING(UGU.TLNO, 1, 3), '-', // 1번부터 3자리
SUBSTRING(UGU.TLNO, 4, 4), '-',
SUBSTRING(UGU.TLNO, 8)
) AS 전화번호
FROM USED_GOODS_USER UGU
WHERE UGU.USER_ID IN (
SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >= 3
)
ORDER BY UGU.USER_ID DESC;
더 좋은 방법이 있나 찾아봤는데 아래와 같은 방법이 있다.
CONCAT_WS(' ', CITY, ADDRESS1, ADDRESS2) // 구분자를 정하고 합침 (NULL 이 아닌 값들만)
INSERT(STR, IDX, 삭제할 길이, 삽입문자)
INSERT(INSERT(TLNO, 4, 0, '-'), 9, 0, '-') // 4번째 위치에 0길이 제거후 '-' 삽입
❗ 오답노트 / 필요한 지식
'programmers' 카테고리의 다른 글
| 조이스틱 [자바] (1) | 2025.02.14 |
|---|---|
| 프로그래머스 Lv0 캐릭터의 좌표 (0) | 2024.06.26 |
| 프로그래머스Lv 0 로그인 성공? (0) | 2024.06.26 |
| 프로그래머스 Lv 0 배열 회전시키기 (0) | 2024.06.26 |