반응형
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 |