[SQL 오류] [컬럼A] is not a valid group by expression

dragonloly·2025년 1월 27일

SQL

목록 보기
2/19

결론

* GROUP BY를 사용할 때, GROUP 절에 포함되는 절일 경우,

* GROUP BY를 사용할 때, SELECT 절이 아닐 경우,

  • SELECT 절에 있는 모든 컬럼은 집계함수로 감싸야 하거나,
  • GROUP BY에 포함되어야함
000979 (42601): SQL compilation error: [컬럼A] is not a valid group by expression

오류 정의

이 오류는 SELECT 절에서 집계 함수(SUM)를 사용한 컬럼과 그렇지 않은 컬럼(컬럼A)이 동시에 존재할 때, GROUP BY 절이 필요함을 의미합니다.

=> SELECT절은 집계 함수가 필요한 컬럼들과 그렇지 않은 컬럼들 함께 쓸 수 없음!

SELECT 절에서 사용 가능한 컬럼

1. 집계 함수(Aggregate Functions):

SUM(AMOUNTSUM), COUNT(*), AVG(...) 같은 함수들이 사용될 때, 데이터가 그룹화되어 하나의 결과로 집계됨.

2. 비집계 컬럼(Non-Aggregate Columns):

컬럼A 같은 컬럼이 직접 SELECT 절에 포함될 경우, 어떤 기준으로 그룹화할지 SQL 엔진이 알 수 있도록 명시적으로 GROUP BY 절을 사용해야 합니다.

=> 즉, 컬럼A는 단순한 개별 값이므로, 전체를 집계하기 위해선 동일한 기준으로 데이터를 그룹화해함

해결 방법

1. (비집계함수 기준으로) GROUP BY 추가

컬럼A가 어떤 기준(예: 날짜, 카테고리 등)으로 그룹화될지 지정해야 합니다.

SELECT 컬럼A,
       SUM(AMOUNTSUM)
FROM DATA
WHERE date >= '2021-12-01'
  AND date < '2022-02-01'
GROUP BY 컬럼A;

=> 그러나 애초에 컬럼 A는 산별적인 데이터를 가진 애들이어서,
컬럼A별 SUM이 집계되므로 대부분 원하지 않는 결과 도출

2. 집계 방식 수정

SELECT SUM(컬럼A),
       SUM(AMOUNTSUM)
FROM DATA
WHERE date >= '2021-12-01'
  AND date < '2022-02-01';

결론

  • 컬럼A가 개별적인 값이라면 그룹화 기준(GROUP BY)이 필요할 수 있음.
  • 데이터를 합산할지, 개별을 보고 싶은지에 따라 쿼리 구조를 결정해야 함.
profile
코드 기록하기 : )

0개의 댓글