출처
문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.
문제에 대한 해석
-- 사용자 ID, 닉네임, 전체주소, 전화번호
-- 전체주소: 전체 주소는 시, 도로명 주소, 상세 주소
-- 전화번호: xxx-xxxx-xxxx
-- 정렬: 회원id 내림차순
풀이(MYSQL)
select b.writer_id, u.nickname,
concat(u.CITY,' ',u.STREET_ADDRESS1,' ',u.STREET_ADDRESS2),
concat(substr(u.tlno,1,3),'-',substr(u.tlno,4,4),'-',substr(u.tlno,8,4))
from used_goods_board b join used_goods_user u on b.writer_id = u.user_id
group by b.writer_id
having count(1) >=3
order by b.writer_id desc
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- FROM 절: used_goods_board 와 join used_goods_user를 b.writer_id = u.user_id기준으로 조인
- GROUP BY 절: writer_id로 그룹화하여
- HAVING 절: count(1)가 3개 이상일 경우 필터링
- SELECT 절: b.writer_id, u.nickname 과 u.CITY,u.STREET_ADDRESS1,STREET_ADDRESS2를 concat으로 합치고, tlno에 xxx-xxxx-xxx형태로 substr 부분출력하여 concat을 통해 -을 기준으로 합쳐서 출력
- ORDER BY 절: writer_id 내림차순
다른사람 풀이
SELECT
ugu.USER_ID,
ugu.NICKNAME,
CONCAT(ugu.CITY,' ',ugu.STREET_ADDRESS1,' ',ugu.STREET_ADDRESS2) AS '전체주소',
CASE LENGTH(ugu.TLNO)
WHEN 11 THEN CONCAT(LEFT(ugu.TLNO, 3), '-', MID(ugu.TLNO, 4, 4), '-', RIGHT(ugu.TLNO, 4))
WHEN 10 THEN CONCAT(LEFT(ugu.TLNO, 3), '-', MID(ugu.TLNO, 4, 3), '-', RIGHT(ugu.TLNO, 4))
END AS '전화번호'
FROM (
SELECT
WRITER_ID,
COUNT(*)
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(*) >= 3
) AS ugb
INNER JOIN USED_GOODS_USER AS ugu
ON ugb.WRITER_ID = ugu.USER_ID
ORDER BY 1 DESC
SELECT
USER_ID,
NICKNAME,
CONCAT(CITY, ' ',STREET_ADDRESS1, ' ', STREET_ADDRESS2) 전체주소,
REGEXP_REPLACE(TLNO, '(.{3})(.{4})(.{4})', '$1-$2-$3') 전화번호
FROM
USED_GOODS_BOARD A
INNER JOIN USED_GOODS_USER B
ON A.WRITER_ID = B.USER_ID
GROUP BY
USER_ID
HAVING
COUNT(USER_ID) >= 3
ORDER BY
USER_ID DESC
배운점
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.01.24 |
---|---|
[문제풀이] 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.01.22 |
[문제풀이] 특정 옵션이 포함된 자동차 리스트 구하기 (0) | 2024.01.22 |
[문제풀이] 조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.01.22 |
[문제풀이] 과일로 만든 아이스크림 고르기 (0) | 2024.01.19 |