_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (273)
    • 데이터 엔지니어링 (30)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 프로그래머스 조건에 맞는 사용자와 총 거래금액 조회하기 MySQL
코딩테스트

[코딩테스트] 프로그래머스 조건에 맞는 사용자와 총 거래금액 조회하기 MySQL

2023. 3. 13. 10:21
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/164670

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT WRITER_ID,
       NICKNAME,
       CONCAT_WS(' ',CITY, STREET_ADDRESS1, STREET_ADDRESS2) AS '전체주소',
       CONCAT_WS('-', LEFT(TLNO, 3), MID(TLNO,4, 4), RIGHT(TLNO, 4)) As '전화번호'
FROM USED_GOODS_BOARD AS BOARD
JOIN USED_GOODS_USER AS USER
ON BOARD.WRITER_ID = USER.USER_ID
GROUP BY WRITER_ID
HAVING COUNT(WRITER_ID) >= 3
ORDER BY WRITER_ID DESC

JOIN을 사용한 풀이

USED_GOODS_BOARD 테이블의 WRITER_ID 컬럼과 USED_GOODS_USER 테이블의 USER_ID 컬럼을 기준으로 두 테이블을 JOIN하였습니다.

WRITER_ID 컬럼을 기준으로 GROUP BY로 그룹화를 진행하고
HAVING 문에서 COUNT(WRITHER_ID) >= 3으로 게시물이 3건이상 등록한 데이터를 조회하였습니다.

SELECT문에서는 CONCAT_WS함수를 사용하여 컬럼을 합쳐서 출력하였습니다.

  • '전체주소' 컬럼의 경우에는 CITY, STREET_ADDRESS1, STREET_ADDRESS2 컬럼들 사이마다 ' ' 공백을 추가하였습니다.
  • '전화번호' 컬럼의 경우에는 LEFT, MID, RIGHT 함수를 사용하여 컬럼들 사이마다 - 하이픈을 추가하였습니다.
    • EX : 01012345678
    • LEFT(TLNO, 3) : 문자에 왼쪽에서부터 3번째 글자까지 추출, 010 추출
    • MID(TLNO,4,4) : 문자에 지정한 시작위치 4를 기준으로 4번째 글짜까지 추출, 1234 추출
    • RIGHT(TLNO, 4) : 문자에 오른쪽에서부터 4번째 글짜까지 추출, 5678 추출

마지막으로 ORDER BY에서 WRITER_ID를 내림차순 정렬하여 결과를 반환하였습니다.

WITH문을 사용한 풀이

WITH COUNT3 AS (
    SELECT WRITER_ID
    FROM USED_GOODS_BOARD
    GROUP BY WRITER_ID
    HAVING COUNT(WRITER_ID) >=3
)

SELECT WRITER_ID,
       NICKNAME,
       CONCAT_WS(' ',CITY, STREET_ADDRESS1, STREET_ADDRESS2) AS '전체주소',
       CONCAT_WS('-', LEFT(TLNO, 3), MID(TLNO,4, 4), RIGHT(TLNO, 4)) As '전화번호'
FROM COUNT3
JOIN USED_GOODS_USER AS USER
ON COUNT3.WRITER_ID = USER.USER_ID
ORDER BY WRITER_ID DESC

방식은 JOIN을 사용한 풀이와 유사하지만 WITH문을 이용하여 가상테이블 COUNT3만들고
게시글이 3건이상 등록한 WRITER_ID를 추출한후에
USER테이블과 JOIN하는 차이점이 있습니다.

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 프로그래머스 땅따먹기 파이썬(Python)  (0) 2023.03.16
[코딩테스트] 프로그래머스 조건에 맞는 사용자 정보 조회하기 MySQL  (0) 2023.03.14
[코딩테스트] 프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 MySQL  (0) 2023.03.13
[코딩테스트] 프로그래머스 조건에 부합하는 중고거래 상태 조회하기 MySQL  (0) 2023.03.11
[코딩테스트] 프로그래머스 조건에 부합하는 중고거래 댓글 조회하기 MySQL  (0) 2023.03.10
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 프로그래머스 땅따먹기 파이썬(Python)
    • [코딩테스트] 프로그래머스 조건에 맞는 사용자 정보 조회하기 MySQL
    • [코딩테스트] 프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 MySQL
    • [코딩테스트] 프로그래머스 조건에 부합하는 중고거래 상태 조회하기 MySQL
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바