250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

데이터 놀이터

String, Date - 조건에 맞는 사용자 정보 조회하기 본문

SQL

String, Date - 조건에 맞는 사용자 정보 조회하기

jjjk84 2023. 8. 28. 21:14
728x90

1. 문제

 

USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서

중고 거래 게시물을 3건 이상 등록한 사용자의

사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요.

이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고,

전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요.

결과는 회원 ID를 기준으로 내림차순 정렬해주세요.

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

 

2. 문제 조건

 

  1. 중고 거래 게시물을 3건 이상 등록한 사용자 -> GROUP BY, HAVING
  2. 사용자 ID, 닉네임, 전체주소, 전화번호를 조회 -> SELECT
  3. 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력 -> CONCAT 또는 CONCAT_WS
  4. 회원 ID를 기준으로 내림차순 정렬 -> ORDER BY

 

3. 코드 작성

 

/*
1. 중고 거래 게시물을 3건 이상 등록한 사용자
2. 사용자 ID, 닉네임, 전체주소, 전화번호를 조회
3. 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력
4. 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력
5. 결과는 회원 ID를 기준으로 내림차순 정렬
*/

SELECT USER_ID
     , NICKNAME
     , CONCAT_WS(' ', CITY, STREET_ADDRESS1, STREET_ADDRESS2) AS '전체주소'
     , CONCAT_WS('-', LEFT(TLNO, 3), SUBSTR(TLNO, 4, 4), RIGHT(TLNO, 4)) 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;

 

4. 회고

 

  • CONCAT_WS 함수를 사용하는 문제였는데, 처음에 기억나지 않아 결국에는 지난번에 작성한 블로그 글을 참고하여 풀게 되었다. CONCAT_WS의 WS 부분은 정확히 모르겠지만 구분자를 의미하는 Words Split으로 외우면 편할 것 같다.
  •  문자열 자르기 함수를 복습하였다.
    • LEFT, RIGHT
    • SUBSTR(자르고자 하는 문자열, 시작점, 몇번째까지 자를지)
  • 문제 조건을 잘 읽지 않아서 푸는데 오랜 시간이 걸렸다. 문제를 풀기 전 테이블의 컬럼명, 테이블간 관계 등을 잘 파악해서 풀어야겠다.
728x90