programmers

조건에 맞는 사용자 정보 조회하기 [MYSQL]

Meluu_ 2025. 11. 18. 22:55

 

🧫 문제 분석

✔️ 출처

조건에 맞는 사용자 정보 조회하기

📖 문제

 

살짝 고민했던 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길이 제거후 '-' 삽입

❗ 오답노트 / 필요한 지식

  1.  

'programmers' 카테고리의 다른 글

조이스틱 [자바]  (1) 2025.02.14
프로그래머스 Lv0 캐릭터의 좌표  (0) 2024.06.26
프로그래머스Lv 0 로그인 성공?  (0) 2024.06.26
프로그래머스 Lv 0 배열 회전시키기  (0) 2024.06.26