본문 바로가기

카테고리 없음

SQL문 GROUP BY구 주의 할 점

반응형

이전 글에서 GROUP BY구를 이용을 하는 방법에 대해서 확인을 하였습니다. 

 

2022.07.25 - [SQL문] - SQL문 테이블 그룹 나누는 방법

 

이번 글에서는 GROUP BY구를 이용을  할 때 자주하는 실수에 대해서 확인을 하여 보도록 하겠습니다. 

 

1. SELECT 구에서 하는 실수

이전 글에서 배운  집약 함수인 COUNT를 사용을 할 때  SELECT  구에 기술을 할 수가 있는 요소는 매우 제한적이라고 하였습니다. 

 

SELECT  구에  기술을 할 수가 있는  요소는 상수 , 집약함수 ,  GROUP BY구에 지정할 열 이 정도가 있습니다. 

 

상수란 숫자 또는 문자열과 같이  고정된 값을 말합니다.  아래  구문을 보도록 하겠습니다. 

 

SELECT  M_CLASS,M_NAME ,COUNT(*)  FROM  MyTest01  GROUP BY M_CLASS   ;

 

위 구문을  실행을 하면  오류가 발생을 해서 실행이 되지를 않습니다.  이유는 이렇습니다. 

M_NAME 이라는 열이  GROUP BY 구에 없기 때문에  오류가 발생을 합니다. 

 

그래서 GROUP BY구 사용을 할 때는 SELECT 구에 집약키 외에 열명을  기술을 하시면 안됩니다. 

 


2.GROUP BY 구에  AS 키워드를 이용을 하는 경우

 

이전 글에서  AS 키워드에 대해서 배웠습니다.   열에 별명을  부여를 하는 AS 키워드를  SELECT  구에  사용을 할 수가 있습니다.  하지만 GROUP BY에는 사용을 하시면  안됩니다.  

 

아래  구문을 보도록 하겠습니다. 

 

SELECT  M_CLASS AS CL COUNT(*)  FROM  MyTest01  GROUP BY CL;

 

이렇게  별명을  GROUP BY 구에 적으시면  오류가 발생을 해서  실행이 되지를 않습니다.

 


3. WHERE 구에  집약함수를 이용을 하는 경우

 

 GROUP BY 구를 이용을 해서  데이터를 추출을 할 때   정렬은  무작위로 정렬이 됩니다. 그래서  경우에 따라서는 1행만  출력이 되는 경우도 있지만   데이터가 많은 경우에는  상당히 많은 행이 출력이 됩니다. 

 

예을 들어서  아래와 같이  다수의 행이 출력이 된 경우입니다. 

 

M_CLASS  | COUNT

PC부품       |   5

사무용품     |   10

기타용퓸     |   100

 

이 행중에   PC 용품에 대해서만  출력을 하고 싶다면   아래와 같이  기술을 하는 경우가 많습니다. 

 

SELECT  M_CLASS  COUNT(*)  FROM  MyTest01 WHERE COUNT(*)=5  GROUP BY M_CLASS  ;

 

이렇게 기술을 하는 경우가 많습니다. 이렇게 작성을 하고 SQL문을  실행을 하면 오류가 발생을 해서 실행이 되지를 않습니다.

 

집약함수를  사용을 할 수가 있는  부분은  SELECT  구 와  HAVING  구에서만  이용을 할 수가 있습니다. 

 


여기까지  GROUP BY 구를 이용을 할 때 자주하는 실수에 대해서 확인을 하였습니다.  다음 부터는   집약한  결과에서  조건을 지정을 하여  내가 원하는 데이터를  좀더 쉽게  추출을 할 수가 있는  방법에 대해서 확인을 하여 보도록 하겠습니다. 

 

 

 

 

 

 

 

 

 

반응형