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

 

프로그래머스

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

programmers.co.kr

코드설명

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;

+ Recent posts