Among Us - Orange Crewmate

상세 컨텐츠

본문 제목

프로그래머스 문제풀이(MySQL) - LV.3

database

by nick wilde 2024. 1. 10. 20:48

본문

반응형

첫번째 문제◆

 

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

 

 

_______문제_______

USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.

 

 

코드 수행시 결과 예시값은 다음과 같다

 

 

 

1. 첫번째 풀이

SELECT USER_ID, NICKNAME, CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) AS 전체주소,
    CONCAT(SUBSTR(TLNO,1,3),"-",SUBSTR(TLNO,4,4),"-",SUBSTR(TLNO,8)) AS 전화번호 
FROM USED_GOODS_BOARD LEFT JOIN USED_GOODS_USER ON(WRITER_ID = USER_ID)
GROUP BY WRITER_ID
HAVING COUNT(WRITER_ID) >= 3
ORDER BY USER_ID DESC

 

풀이 설명▼

더보기

from 절에서 USED_GOODS_BOARD 테이블과 USED_GOODS_USER 테이블 간에 연관 관계가 LEFT JOIN을 통해 형성되었습니다.

이러한 연관 관계는 WRITER_ID = USER_ID 조건으로 정의되어 있고, 이는 USED_GOODS_BOARD 테이블의 WRITER_ID 열과 USED_GOODS_USER 테이블의 USER_ID 열 간의 값이 서로 일치하는 경우에만 결과에 해당 항목이 포함되도록 하는데 사용됩니다.

이렇게 함으로써 두 테이블 간의 연관성을 활용하여 원하는 정보를 가져올 수 있습니다.

 

2. 두번째 풀이(서브쿼리 활용)

 SELECT USER_ID, NICKNAME, CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) AS 전체주소,
     CONCAT(SUBSTR(TLNO,1,3),"-",SUBSTR(TLNO,4,4),"-",SUBSTR(TLNO,8)) AS 전화번호
 FROM USED_GOODS_USER
 WHERE USER_ID IN (SELECT WRITER_ID
          FROM USED_GOODS_BOARD
          GROUP BY WRITER_ID
          HAVING COUNT(*)>=3)
 ORDER BY USER_ID DESC

 

풀이 설명▼

더보기

WHERE 절에서 하위 쿼리를 사용하여 조건을 설정합니다. 하위 쿼리는 USED_GOODS_BOARD 테이블에서 WRITER_ID를 그룹화하고, 글을 쓴 횟수가 3회 이상인 사용자들의 WRITER_ID를 선택합니다.

따라서, USED_GOODS_USER 테이블에서는 USED_GOODS_BOARD 테이블과의 관계를 USER_ID와 WRITER_ID 간의 일치로 설정하고 있습니다.

이를 통해 글을 쓴 횟수가 3회 이상인 사용자들의 정보만을 가져옵니다.

최종적으로 ORDER BY USER_ID DESC를 통해 결과를 USER_ID를 기준으로 내림차순으로 정렬합니다.

 

이렇게 함으로써 USED_GOODS_USER 테이블에서 글을 쓴 횟수가 3회 이상인 사용자들의 정보만을 가져오게 됩니다.

 

 

 

 

반응형

관련글 더보기