Welcome! Everything is fine.

[프로그래머스/Lv.3] 조건에 맞는 사용자 정보 조회하기 - MySQL 본문

프로그래머스/SQL

[프로그래머스/Lv.3] 조건에 맞는 사용자 정보 조회하기 - MySQL

개발곰발 2024. 4. 2.
728x90

📌 문제

 

프로그래머스

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

programmers.co.kr

📌 제출한 오답

전화번호를 xxx-xxxx-xxxx 과 같은 형태로 만드는 방법을 몰라서 찾아보았는데, SUBSTR의 사용법을 잘못 알고 시도해 원하는 결과가 나오지 않았다. SUBSTR(U.TLNO, 1, 3)이 1부터 3까지의 인덱스를 의미하는게 아니라 인덱스 1에서부터 3만큼 자른다는 의미였다. 또한 내림차순 정렬을 깜빡해 오답 처리 되었다. 

SELECT U.USER_ID, U.NICKNAME, 
CONCAT(U.CITY, " ", U.STREET_ADDRESS1, " ", U.STREET_ADDRESS2) AS 전체주소,
CONCAT(SUBSTR(U.TLNO,1,3), '-', SUBSTR(U.TLNO,4,4), '-', SUBSTR(U.TLNO,8)) AS 전화번호
FROM USED_GOODS_BOARD AS B JOIN USED_GOODS_USER AS U ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.BOARD_ID) >= 3
ORDER BY U.USER_ID;

📌 정답

내림차순 정렬로 바꿔주었고, STREET_ADDRESS2는 Nullable이 TRUE로 명시되어 있어 NULL일 때는 아무것도 들어가지 않도록 바꿨다.(이건 없어도 정상 채점이 되는 것으로 보인다.) 나머지는 원래 코드와 똑같다.

SELECT U.USER_ID, U.NICKNAME, 
CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', IFNULL(U.STREET_ADDRESS2, '')) AS 전체주소,
CONCAT(SUBSTR(U.TLNO,1,3), '-', SUBSTR(U.TLNO,4,4), '-', SUBSTR(U.TLNO,8)) AS 전화번호
FROM USED_GOODS_BOARD B JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.BOARD_ID) >= 3
ORDER BY U.USER_ID DESC;

📌 기억할 것

  • SUBSTR(문자열, 시작위치, 길이)
  • 문자열을 뒤에서부터 자를 때는 시작 위치에 음수를 입력한다.