프로그래머스 SQL - GROUP BY

yeyeyeyeye·2025년 2월 25일

25번 문제: PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/131529

풀이

SELECT SUBSTR(product_code,1,2) as product_category
COUNT(product_id) as products
FROM product
GROUP BY product_category
ORDER BY product_category


27번 문제.
APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.

1~4번 보기 중 틀린 것과 옳은 것을 분류하시오.

1번
SELECT mcdp_cd '진료과 코드',
COUNT(pt_no) as '5월예약건수'
FROM appointment
WHERE DATE_FORMAT(APNT_YMD,'%y-%m') in('22-05')
GROUP BY '진료과 코드'
ORDER BY '5월예약건수'

1번: ❌

  • GROUP BY '진료과 코드' → 문자열로 인식됨
    '진료과 코드'는 컬럼 이름이 아니라 문자열 리터럴로 인식됨.
    즉, GROUP BY '진료과 코드'는 실제로 데이터 그룹화가 이루어지지 않음.
    올바른 방법은 컬럼명을 직접 사용해야 함 → GROUP BY mcdp_cd
    (*굳이 '진료과 코드'라고 적고 싶으면 띄어쓰기 삭제할 것.)
  • ORDER BY '5월예약건수' → 문자열로 인식됨
    '5월예약건수' 역시 컬럼 이름이 아니라 문자열 리터럴로 취급됨.
    따라서 정렬이 제대로 동작하지 않음.
    올바른 방법은 ORDER BY COUNT(pt_no) 또는 ORDER BY 5월예약건수

2번
SELECT mcdp_cd as '진료과코드',
COUNT(pt_no) as '5월예약건수'
FROM appointment
WHERE DATE_FORMAT(APNT_YMD,'%y-%m') in ('22-05')
GROUP BY mcdp_cd
ORDER BY 5월예약건수, 진료과코드

2번:⭕️

3번
SELECT mcdp_cd '진료과 코드',
COUNT(pt_no) as '5월예약건수'
FROM appointment
WHERE DATE_FORMAT(APNT_YMD,'%y-%m') in ('22-05')
GROUP BY mcdp_cd
ORDER BY 5월예약건수

3번: ❌

3번은 정렬이 잘못 됐다.
옳게하려면 ORDER BY절에 mcdp_cd를 추가해주거나 desc를 추가.


GROUP BY

:특정 컬럼을 기준으로 데이터를 요약해서 비교하고 싶을 때 사용
(위 문제의 경우 카테고리 코드를 기준으로 상품 개수를 구하고 싶은 것)

[SQL 작성방법]
1. SELECT 뒤 기준컬럼(나라, 성별, 레벨 등등) 작성
2. 집계함수(COUNT, MAX, MIN, SUM, AVG) 작성
3. WHERE 절 뒤 GROUP BY 기준컬럼 작성 (WHERE절 생략 가능)

📌주의
1, 2번 작성 후 3번 작성하지 않을 경우 에러가 발생

profile
안녕하세요? 데이터분석가 되고 싶어요.

0개의 댓글