[SQL] 저자 별 카테고리 별 매출액 집계하기

2025. 5. 8. 20:07·알고리즘/SQL
728x90
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

-- 코드를 입력하세요
-- 판매중인 도서 정보 BOOK
-- 저자 정보 AUTHOR
-- BOOK_SALES
-- 2022년 1월, 저자 별, 카테고리 별 매출액

SELECT 
    B.AUTHOR_ID,
    A.AUTHOR_NAME,
    B.CATEGORY,
    SUM(S.SALES * B.PRICE) AS TOTAL_SALES
FROM BOOK_SALES S
JOIN BOOK B ON S.BOOK_ID = B.BOOK_ID
JOIN AUTHOR A ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE DATE_FORMAT(S.SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY B.AUTHOR_ID, B.CATEGORY
ORDER BY B.AUTHOR_ID, B.CATEGORY DESC;

 

 

✅ WHERE vs HAVING 차이점

구분 WHERE HAVING
시점 GROUP BY 이전 GROUP BY 이후 (즉, 집계 이후)
대상 행 단위 조건 그룹 단위 조건 (집계 결과)
사용 예시 WHERE price > 1000 HAVING SUM(sales) > 100000
동작 방식 필터링 후 그룹화 그룹화 후 필터링

 

 

✅ 1. SQL 표준의 관점 (STRICT SQL, PostgreSQL 등)

SQL 표준에 따르면 SELECT 절에 나오는 집계되지 않은 컬럼은 모두 GROUP BY에 포함되어야 한다.

 

-- 아래는 SQL 표준에서는 오류
SELECT AUTHOR_ID, AUTHOR_NAME, SUM(SALES)
FROM ...
GROUP BY AUTHOR_ID;

 

 

✅ 2. MySQL의 관점 (기본값: ONLY_FULL_GROUP_BY OFF)

MySQL은 ONLY_FULL_GROUP_BY 모드가 비활성화되어 있으면, GROUP BY에 포함되지 않은 컬럼이 SELECT에 있어도 “동일한 값으로 간주되는 경우”에는 허용한다. 즉, 다음 쿼리도 실행된다.

단, 이건 MySQL이 내부적으로 AUTHOR_NAME을 AUTHOR_ID로부터 결정 가능하다고 판단할 수 있을 때만 통과된다.

SELECT AUTHOR_ID, AUTHOR_NAME, SUM(SALES)
FROM ...
GROUP BY AUTHOR_ID;

 

AUTHOR_ID와 AUTHOR_NAME은 1:1 관계이다. 즉, 같은 AUTHOR_ID에 대해 AUTHOR_NAME은 항상 동일하므로:

GROUP BY AUTHOR_ID, CATEGORY

 

만 써도 실제 결과에는 문제가 없다. 하지만 명시적으로 AUTHOR_NAME을 GROUP BY에 포함시키는 것이 더 안전하고 이식성이 좋다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > SQL' 카테고리의 다른 글

[SQL] 조건에 맞는 사원 정보 조회하기  (0) 2025.05.16
[SQL] 입양 시각 구하기 (2)  (0) 2025.05.09
[SQL] 재귀 CTE(Command Table Expression)를 이용한 계층적 구조 탐색  (0) 2025.05.09
[SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기  (0) 2025.05.09
'알고리즘/SQL' 카테고리의 다른 글
  • [SQL] 조건에 맞는 사원 정보 조회하기
  • [SQL] 입양 시각 구하기 (2)
  • [SQL] 재귀 CTE(Command Table Expression)를 이용한 계층적 구조 탐색
  • [SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기
moongi
moongi
프로그래밍 관련 공부를 정리하는 블로그
  • moongi
    By_Me
    moongi
  • 전체
    오늘
    어제
    • 공부 (58) N
      • 알고리즘 (26) N
        • 기업별 유사 문제 (2)
        • Sudo Code (4)
        • 예외처리 (1)
        • SQL (5)
      • spring boot (6)
        • jpa (0)
        • querydsl (0)
        • MVC pattern (0)
        • setting (2)
      • 취준 (6)
      • CS (8)
        • 디자인패턴 (1)
        • 데이터베이스 (4)
        • 네트워크 (3)
        • 운영체제 (0)
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
moongi
[SQL] 저자 별 카테고리 별 매출액 집계하기
상단으로

티스토리툴바