본문 바로가기

프로그래머스 풀이/Lv 3

[프로그래머스 SQL] 조건에 맞는 사용자 정보 조회하기

728x90

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

 

프로그래머스

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

programmers.co.kr

 

두 테이블이 존재할 때 하나의 조건을 따져 결과물을 내놓고 그 값과 WHERE 조건으로 맞추면 되는 문제이다. 먼저 USED_GOODS_BOARD 테이블에서 아이디로 그룹화하여 각 아이디가 몇개 있는지 확인하고 HAVING 구문으로 아이디의 개수가 3이상인 것만 남긴다. 그리고 WHERE와 IN 구문을 사용하여 원하는 정보를 가져온다.

 

그러나 이 문제의 핵심은 CONCAT, SUBSTR 함수 쓸 줄 아느냐였다.

 

난 SQLD 자격증 보유자이므로 당연히 이 내용을 배웠지만! 까먹었기 때문에 다시 정리한다.

 

CONCAT은 문자열을 이어붙이는 함수로 SELECT 했을 때 원하는 형태로 값을 출력하기 위해 많이 사용한다.

 

str1 = "ABC"

str2= "DEF"

 

CONCAT(str1, str2) = "ABCDEF"

 

SUBSTR 은 문자열을 자를때 사용한다.

 

str = "ABCDE"

 

SUB(str, 1, 3) = "ABC"

 

-> 1번째 문자부터 길이 3을 나타낸다. 즉 A부터 길이가 3이 되도록 하면 ABC

 

01012345678 이것을 010-1234-5678 로 나타내고 싶다면

 

num = 01012345678

 

CONCAT(SUBSTR(num, 1, 3) , '-', SUBSTR(num, 4, 4) , '-',SUBSTR(num, 8, 4)) = 010-1234-5678

 

-- 코드를 입력하세요
SELECT USER_ID, NICKNAME, CONCAT(CITY, ' ', STREET_ADDRESS1, ' ',STREET_ADDRESS2) AS 전체주소, 
CONCAT(SUBSTR(TLNO, 1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8, 4)) AS 전화번호 
FROM USED_GOODS_USER
WHERE USER_ID IN (
        SELECT WRITER_ID 
        FROM USED_GOODS_BOARD
        GROUP BY WRITER_ID
        HAVING COUNT(WRITER_ID) >= 3
    )
ORDER BY USER_ID DESC;