devFancy BE Developer

[Programmers] 131529. 카테고리 별 상품 개수 구하기(Lv.2) (String, Date)

2023-02-25
devFancy
SQL

문제 링크

성능 요약

  • 메모리: 0.0 MB, 시간: 0.00 ms

구분

  • 코딩테스트 연습 > String, Date

Answer Code1(2023.02.25)

SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY CATEGORY;

문제 풀이 - Answer Code1

  • 이번 문제는 컬럼에서 특정 문자열을 추출하고 이를 집계하는 문제였다.

  • [1] 상품 카테코리 코드(PRODUCT_CODE, 2)별 상품 개수를 출력한다.

    • 아래 실행 예시를 보면 CATEGORY, PRODUCTS을 확인할 수 있다. -> 문제에서 해당 두개의 컬럼을 사용하라는 의미다.

    • ‘PRODUCT_CODE’ 컬럼에서 앞 2글자가 CATEGORY를 의미하고, 카테고리별로 해당하는 숫자를 구하면 되는 문제인 것이다.

    • 결과 : SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY, COUNT(PRODUCT_ID) AS PRODUCTS

  • [2] PRODUCT 테이블에서 가져오는 것이므로 -> 결과 : FROM PRODUCT

  • [3] 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요. -> 실행 예시에서는 CATEGORY를 기준으로 오름차순 했으므로 해당 키워드를 사용하라는 의미다.

    • 유형별로 갯수를 알고 싶을 때 컬럼에 데이터를 그룹화 할 수 있는 GROUP BY를 사용한다. (특정 컬럼을 그룹화)

    • 결과 : GROUP BY CATEGORY : 기본적으로 오름차순으로 정렬한다.

Answer Code2(2023.02.25)

SELECT  SUBSTR(PRODUCT_CODE,1,2) AS CATEGORY
        , COUNT(*)
FROM PRODUCT 
GROUP BY SUBSTR(PRODUCT_CODE,1,2);

문제 풀이 - Answer Code2

  • 해당 풀이는 데코님의 풀이를 참고했다.

  • SUBSTR() 함수는 문자열을 다룰 때 쓰는 함수다.

  • 문자열을 다루는 함수에는 총 4가지가 존재한다.

    • SUBSTR(), MID(), LEFT(), RIGHT()

    • SUBSTR() 와 MID() 함수는 MySQL에서 문자열의 일부분을 가지고 오는 함수이다. 두 함수는 같은 역할을 수행하고 사용법 또한 같다.

  • SUBSTR()

    • SUBSTR(문자, 시작위치, 가져올 개수)

    • 가져올 개수를 정의하지 않으면, 시작 위치 이후의 모든 값을 불러온다.

SELECT SUBSTR('HELLO', 2 , 3) 
# 출력 결과 : 'ELL'

SELECT SUBSTR('HELLO', 2)
# 출력 결과 : 'ELLO'
  • MID()

    • MID(문자, 시작위치, 가져올 개수)

    • 가져올 개수를 정의하지 않으면, 시작 위치 이후의 모든 값을 불러온다.

SELECT MID('HELLO', 1 , 3) 
# 출력 결과 : 'HEL'

SELECT MID('HELLO', 3)
# 출력 결과 : 'LLO'
  • LEFT()

    • LEFT(문자, 왼쪽부터 가져올 개수)
SELECT MID('HELLO', 4) 
# 출력 결과 : 'HELL'
  • RIGHT()

    • RIGHT(문자, 오른쪽부터 가져올 개수)
SELECT MID('HELLO', 3) 
# 출력 결과 : 'LLO'

Review

  • 첫 번째 풀이 방식에서는 유형별로 그룹화하는 GROUP BY를 사용하는 것을 알았고,

  • 두 번째 풀이 방식에서는 문자열을 다루는 함수(SUBSTR(), MID(), LEFT(), RIGHT())들에 대해 새로 알게되었다.

  • 해당 문제에 대한 풀이 방법도 중요하지만, 그 외에 다른 추가적인 지식들도 같이 배우는 습관을 가지자.

Reference


Comments

Index