https://school.programmers.co.kr/learn/courses/30/lessons/131529
코드설명
SUBSTRING + GROUP BY + COUNT 를 활용합니다.
JAVA에서는 "HELLO".SUBSTRING(0,2) 를 실행하면 HE가 잘라져서 나옵니다.
MYSQL에서는 문자열의 첫 시작이 1이고, 끝부분도 포함해서 작동합니다.
0번째부터 시작하지 않는다고 생각하면 됩니다.
코드
-- 코드를 입력하세요
SELECT SUBSTRING(PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY
ORDER BY CATEGORY ASC;
SELECT SUBSTR(P.PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(*) AS PRODUCTS
FROM PRODUCT AS P
GROUP BY CATEGORY
ORACLE
ORACLE은 SELECT문의 CATEGORY를 GROUP BY 에서 사용하려고 하면 사용이 안됩니다.
위의 MYSQL 또한 기본적으로는 사용이 안되어야하지만, MYSQL의 경우 어느정도 유연성을 제공하는 것으로 보입니다.
이유는 ORACLE에서 SQL의 실행순서를 알아야 합니다.
실행순서는
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY 입니다.
별칭은 SELECT시점이기에 GROUP BY 에서는 선택할 수 없습니다.
SELECT SUBSTR(P.PRODUCT_CODE, 1, 2) AS CATEGORY, COUNT(*) AS PRODUCTS
FROM PRODUCT P
GROUP BY SUBSTR(P.PRODUCT_CODE, 1, 2)
ORDER BY CATEGORY
임시테이블 및 SUBQUERY 로 처리할 수도 있습니다.
먼저 CATEGORY 정보들을 가져온뒤 해당 CATEGORY 로 GROUP BY 처리하고, COUNT(*) 로 개수를 출력합니다.
SELECT
CATEGORY, COUNT(*)
FROM (
SELECT SUBSTR(P.PRODUCT_CODE, 1, 2) AS CATEGORY
FROM PRODUCT P
)
GROUP BY CATEGORY
ORDER BY CATEGORY;