📑 1. 문제설명


❌ 2. 실패한 시도
SELECT U.User_id, U.Nickname,
CONCAT(U.City,' ', U.Street_address1, ' ',
U.Street_address2) AS 전체주소,
CONCAT(SUBSTR(TLNO, 1, 3), '-',
SUBSTR(TLNO, 4, 4), '-',
SUBSTR(TLNO, 8)) AS 전화번호
FROM Used_goods_board B JOIN Used_goods_user U
ON B.Writer_id = U.User_id
HAVING COUNT(BOARD_ID) >= 3
ORDER BY U.User_id DESC;
- CONCAT 함수는 + 가 아니라 , 를 사용해서 연결함
- HAVING 절에서 집계함수 쓸 때는 반드시 GROUP BY 와 함께 사용해야 한다.
- (SQL 표준에서 SELECT에 포함된 모든 비집계 열은 GROUP BY에 포함되어야 한다는 규칙 때문)
MySQL의 인덱스
MySQL에서의 문자열 관련 함수는 1-based 인덱스를 사용한다. 즉, 첫 번째 문자는 1번 인덱스에 해당한다. (자바와 다름)
예를 들어, SUBSTR() 함수나 LEFT() 함수 등의 인덱싱이 1부터 시작한다.
SELECT SUBSTRING('abcdef', 1, 3); -- 결과: 'abc' (첫 번째 문자부터 시작하여 3개 문자)
⭐ 3. 정답코드
SELECT U.User_id,
U.Nickname,
CONCAT(U.City, ' ', U.Street_address1, ' ', U.Street_address2) AS 전체주소,
CONCAT(SUBSTR(TLNO, 1, 3), '-',
SUBSTR(TLNO, 4, 4), '-',
SUBSTR(TLNO, 8)) AS 전화번호
FROM Used_goods_board B JOIN Used_goods_user U ON B.Writer_id = U.User_id
GROUP BY
U.User_id, U.Nickname, U.City, U.Street_address1, U.Street_address2, U.TLNO
HAVING COUNT(BOARD_ID) >= 3
ORDER BY U.User_id DESC;
'코딩테스트 > SQL테스트' 카테고리의 다른 글
[프로그래머스] (MySQL) 분기별 분화된 대장균의 개체 수 구하기 (11) | 2025.01.21 |
---|---|
[프로그래머스] (MySQL) 루시와 엘라 찾기, 한 해에 잡은 물고기 수 구하기 , DATETIME에서 DATE로 형 변환 (9) | 2025.01.21 |
[프로그래머스] (MySQL) 대여 기록이 존재하는 자동차 리스트 구하기 (11) | 2025.01.19 |
[프로그래머스] (MySQL) 조건별로 분류하여 주문상태 출력하기 (9) | 2025.01.18 |
[프로그래머스] (MySQL) 중성화 여부 파악하기 문제풀이 (14) | 2025.01.18 |
📑 1. 문제설명


❌ 2. 실패한 시도
SELECT U.User_id, U.Nickname, CONCAT(U.City,' ', U.Street_address1, ' ', U.Street_address2) AS 전체주소, CONCAT(SUBSTR(TLNO, 1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8)) AS 전화번호 FROM Used_goods_board B JOIN Used_goods_user U ON B.Writer_id = U.User_id HAVING COUNT(BOARD_ID) >= 3 ORDER BY U.User_id DESC;
- CONCAT 함수는 + 가 아니라 , 를 사용해서 연결함
- HAVING 절에서 집계함수 쓸 때는 반드시 GROUP BY 와 함께 사용해야 한다.
- (SQL 표준에서 SELECT에 포함된 모든 비집계 열은 GROUP BY에 포함되어야 한다는 규칙 때문)
MySQL의 인덱스
MySQL에서의 문자열 관련 함수는 1-based 인덱스를 사용한다. 즉, 첫 번째 문자는 1번 인덱스에 해당한다. (자바와 다름)
예를 들어, SUBSTR() 함수나 LEFT() 함수 등의 인덱싱이 1부터 시작한다.
SELECT SUBSTRING('abcdef', 1, 3); -- 결과: 'abc' (첫 번째 문자부터 시작하여 3개 문자)
⭐ 3. 정답코드
SELECT U.User_id, U.Nickname, CONCAT(U.City, ' ', U.Street_address1, ' ', U.Street_address2) AS 전체주소, CONCAT(SUBSTR(TLNO, 1, 3), '-', SUBSTR(TLNO, 4, 4), '-', SUBSTR(TLNO, 8)) AS 전화번호 FROM Used_goods_board B JOIN Used_goods_user U ON B.Writer_id = U.User_id GROUP BY U.User_id, U.Nickname, U.City, U.Street_address1, U.Street_address2, U.TLNO HAVING COUNT(BOARD_ID) >= 3 ORDER BY U.User_id DESC;
'코딩테스트 > SQL테스트' 카테고리의 다른 글
[프로그래머스] (MySQL) 분기별 분화된 대장균의 개체 수 구하기 (11) | 2025.01.21 |
---|---|
[프로그래머스] (MySQL) 루시와 엘라 찾기, 한 해에 잡은 물고기 수 구하기 , DATETIME에서 DATE로 형 변환 (9) | 2025.01.21 |
[프로그래머스] (MySQL) 대여 기록이 존재하는 자동차 리스트 구하기 (11) | 2025.01.19 |
[프로그래머스] (MySQL) 조건별로 분류하여 주문상태 출력하기 (9) | 2025.01.18 |
[프로그래머스] (MySQL) 중성화 여부 파악하기 문제풀이 (14) | 2025.01.18 |