📑 1. 문제설명


❌ 2. 실패한 코드
PRODUCT_CODE 컬럼이 예를 들면 'A1000011' 이기 때문에
SUBSTRING(컬럼명,시작인덱스,끝인덱스)로 앞 두 자리만 떼어 내야 한다.
SELECT SUBSTRING(Product_code,1,2) AS CATEGORY, COUNT(SUBSTRING(Product_code,1,2)) AS PRODUCTS
FROM PRODUCT
GROUP BY SUBSTRING(Product_code,1,2), Product_code
ORDER BY Category;
내가 작성한 코드의 실행 결과를 보면 A2 기준으로 GROUP 으로 묶이지 않은 것을 확인 할 수 있다.

⭐ 3. 정답코드
GROUP BY 절에서 SUBSTRING(Product_code,1,2)로만 묶어야 함
PRODUCT_CODE 컬럼은 지워주니까 정답처리가 됬다.
HAVING 절에 집계 함수 사용할 때는 GROUPBY 절에 사용된 모든 컬럼을 나열해야 되는 거랑 헷갈렸다.
SUBSTIRNG 함수를 SELECT 절에 쓸 때는 해당하는 컬럼 기준으로만 GROUP BY 해 주면 됨.
SELECT SUBSTRING(Product_code,1,2) AS CATEGORY, COUNT(SUBSTRING(Product_code,1,2)) AS PRODUCTS
FROM PRODUCT
GROUP BY SUBSTRING(Product_code,1,2)
ORDER BY Category;
📌 TMI
문자열 자르기 함수 관련 내용
LEFT()
처음 두 글자로 그룹화할 때 SUBSTRING() 함수 대신 LEFT () 를 써 줘도 된다.
SELECT
LEFT(Product_code, 2) AS Category,
COUNT(*) AS Products
FROM
PRODUCT
GROUP BY
LEFT(Product_code, 2)
ORDER BY
Category;
LEFT는 문자열의 왼쪽에서부터 지정된 문자 수를 자름.
SELECT LEFT('ProductCode123', 6) AS result;
// 결과: 'Produc'
// 문자열 'ProductCode123'의 왼쪽에서 6글자만 자름.
SUBSTRING_INDEX()
특정 구분자로 자른 값으로 그룹화
만약에 '010-1234-5678' 처럼 '-'같은 구분자가 사이에 있다면 이걸 잘라서 그룹화 해야 한다.
그 때 SUBSTRING_INDEX() 함수를 사용한다.
SUBSTRING_INDEX는 문자열을 특정 구분자로 나누고, 그 중 지정된 부분을 반환한다.
SELECT SUBSTRING_INDEX('Product-Code-123', '-', 2) AS result;
// 결과: 'Product-Code'
// '-'를 기준으로 문자열을 나누고, 왼쪽에서 2개의 조각을 반환.
SELECT SUBSTRING_INDEX('Product-Code-123', '-', -1) AS result;
// 결과: '123'
// '-'를 기준으로 문자열을 나누고, 오른쪽에서 1개의 조각을 반환.
요약
LEFT
고정된 문자 수로 잘라내기
예: 처음 3글자 가져오기 → LEFT(Product_code, 3)
SUBSTRING_INDEX
특정 구분자를 기준으로 잘라내기
예: 구분자 '-' 기준으로 첫 번째 조각 가져오기 → SUBSTRING_INDEX(Product_code, '-', 1)
'SQL테스트' 카테고리의 다른 글
[프로그래머스] (MySQL) 오랜 기간 보호한 동물(2) (12) | 2025.01.22 |
---|---|
[프로그래머스] (MySQL) 연도 별 평균 미세먼지 농도 조회하기 (20) | 2025.01.21 |
[프로그래머스] (MySQL) 분기별 분화된 대장균의 개체 수 구하기 (11) | 2025.01.21 |
[프로그래머스] (MySQL) 루시와 엘라 찾기, 한 해에 잡은 물고기 수 구하기 , DATETIME에서 DATE로 형 변환 (9) | 2025.01.21 |
[프로그래머스] (MySQL) 조건에 맞는 사용자 정보 조회하기 (12) | 2025.01.20 |
📑 1. 문제설명


❌ 2. 실패한 코드
PRODUCT_CODE 컬럼이 예를 들면 'A1000011' 이기 때문에
SUBSTRING(컬럼명,시작인덱스,끝인덱스)로 앞 두 자리만 떼어 내야 한다.
SELECT SUBSTRING(Product_code,1,2) AS CATEGORY, COUNT(SUBSTRING(Product_code,1,2)) AS PRODUCTS FROM PRODUCT GROUP BY SUBSTRING(Product_code,1,2), Product_code ORDER BY Category;
내가 작성한 코드의 실행 결과를 보면 A2 기준으로 GROUP 으로 묶이지 않은 것을 확인 할 수 있다.

⭐ 3. 정답코드
GROUP BY 절에서 SUBSTRING(Product_code,1,2)로만 묶어야 함
PRODUCT_CODE 컬럼은 지워주니까 정답처리가 됬다.
HAVING 절에 집계 함수 사용할 때는 GROUPBY 절에 사용된 모든 컬럼을 나열해야 되는 거랑 헷갈렸다.
SUBSTIRNG 함수를 SELECT 절에 쓸 때는 해당하는 컬럼 기준으로만 GROUP BY 해 주면 됨.
SELECT SUBSTRING(Product_code,1,2) AS CATEGORY, COUNT(SUBSTRING(Product_code,1,2)) AS PRODUCTS FROM PRODUCT GROUP BY SUBSTRING(Product_code,1,2) ORDER BY Category;
📌 TMI
문자열 자르기 함수 관련 내용
LEFT()
처음 두 글자로 그룹화할 때 SUBSTRING() 함수 대신 LEFT () 를 써 줘도 된다.
SELECT LEFT(Product_code, 2) AS Category, COUNT(*) AS Products FROM PRODUCT GROUP BY LEFT(Product_code, 2) ORDER BY Category;
LEFT는 문자열의 왼쪽에서부터 지정된 문자 수를 자름.
SELECT LEFT('ProductCode123', 6) AS result; // 결과: 'Produc' // 문자열 'ProductCode123'의 왼쪽에서 6글자만 자름.
SUBSTRING_INDEX()
특정 구분자로 자른 값으로 그룹화
만약에 '010-1234-5678' 처럼 '-'같은 구분자가 사이에 있다면 이걸 잘라서 그룹화 해야 한다.
그 때 SUBSTRING_INDEX() 함수를 사용한다.
SUBSTRING_INDEX는 문자열을 특정 구분자로 나누고, 그 중 지정된 부분을 반환한다.
SELECT SUBSTRING_INDEX('Product-Code-123', '-', 2) AS result; // 결과: 'Product-Code' // '-'를 기준으로 문자열을 나누고, 왼쪽에서 2개의 조각을 반환.
SELECT SUBSTRING_INDEX('Product-Code-123', '-', -1) AS result; // 결과: '123' // '-'를 기준으로 문자열을 나누고, 오른쪽에서 1개의 조각을 반환.
요약
LEFT
고정된 문자 수로 잘라내기
예: 처음 3글자 가져오기 → LEFT(Product_code, 3)
SUBSTRING_INDEX
특정 구분자를 기준으로 잘라내기
예: 구분자 '-' 기준으로 첫 번째 조각 가져오기 → SUBSTRING_INDEX(Product_code, '-', 1)
'SQL테스트' 카테고리의 다른 글
[프로그래머스] (MySQL) 오랜 기간 보호한 동물(2) (12) | 2025.01.22 |
---|---|
[프로그래머스] (MySQL) 연도 별 평균 미세먼지 농도 조회하기 (20) | 2025.01.21 |
[프로그래머스] (MySQL) 분기별 분화된 대장균의 개체 수 구하기 (11) | 2025.01.21 |
[프로그래머스] (MySQL) 루시와 엘라 찾기, 한 해에 잡은 물고기 수 구하기 , DATETIME에서 DATE로 형 변환 (9) | 2025.01.21 |
[프로그래머스] (MySQL) 조건에 맞는 사용자 정보 조회하기 (12) | 2025.01.20 |