ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 그룹 함수 : GROUP BY 와 HAVING + 복수행 함수(집계함수)
    SQL/sql 문법(mysql, mariaDB) 2024. 5. 3. 12:44

    ▤ 목차

      ✔ GROUP BY

      데이터를 그룹화하는 명령어이다.

      GROUP BY절은 주로 집계함수와 같이 사용된다.

      같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐준다.

       

      ⌨ 형식

      select group 컬럼명.. , 계산함수..
      from 테이블명
      where 레코드제어 조건
      group by group 컬럼명... having 출력 결과 조건

      💻 코드로 보기

      SELECT AVG(jikwon_pay), COUNT(*) FROM jikwon WHERE jikwon_gen='남';
      SELECT AVG(jikwon_pay), COUNT(*) FROM jikwon WHERE jikwon_gen='여';

       

      👏 중요

      group by 절에 order by 사용 불가하다.

      단, 출력 결과는 order by 가능한데 결과에 대해서만 실행할 수 있다. (sort 가능) 

      GROUP BY 내부에 ORDER BY 기능이 있다.

      ✔HAVING

      HABING은 GROUP BY에 대한 조건이다.

      조금 풀어 설명해보자면, GROUP BY를 통해 데이터를 그룹핑한 행에대한 조건을 쓸 수있다.

       

      💻 코드로 보기

      -- 부서별 연봉합 : 연봉합이 35000이상만 출력
      SELECT buser_num, SUM(jikwon_pay) FROM jikwon group BY buser_num HAVING SUM(jikwon_pay)>=35000;

      WHERE 과 HAVING절

      데이터를 필터링한다는 점에서 비슷하다.

      언제 사용해야 적절한 것인지 알기 어렵다.

      WHERE 절은 행들이 그루핑되기 전에 필터링이 된다.

      GROUP BY 전에 WHERE절이 사용되는 것으로도 순서를 유추할 수 있다.

      HAVING절은 행이 그룹지어진 후 그루핑된 행들을 필터링하는 역할이다.

       

       

      ✔ 복수행 함수(집계 함수) 

      전체 자료를 그룹별로 구분해 결과를 얻는다.

      ⌨ 형식

      1. COUNT() : 행의 개수를 세어줌
      2. AVG() : 행 안에 있는 값의 평균을 내어줌
      3. MIN() : 행 안에 있는 값의 최솟값을 반환해줌
      4. MAX() : 행 안에 있는 값의 최댓값을 반환해줌
      5. SUM() : 행 안에 있는 값의 을 내어줌

      💻 코드로 보기

      SELECT SUM(jikwon_pay) AS 합 FROM jikwon;
      SELECT AVG(jikwon_pay) AS 평균 FROM jikwon;
      SELECT MAX(jikwon_pay) AS 최대값 FROM jikwon; 
      SELECT MIN(jikwon_pay) AS 최솟값 FROM jikwon; 
      SELECT STDDEV(jikwon_pay) AS 표준편차  FROM jikwon;

       

      🔸COUNT( ... )

      COUNT() 함수를 사용하다보면 헷갈리는 개념이 있었다.

      COUNT(*) 와 COUNT(칼럼)의 차이이다.

       

      COUNT(*)는 모든 행의 개수를 센다는 것을 의미한다. 예를 들어 원하는 부서별 인원을 알고 싶다면

      SLECT COUNT(*) FROM jikwon GROUP BY buser_no;

      부서별로 GROUP BY를 사용해 묶고 전체 행을 세면된다. * 대신에 COUNT(buser_no)을 넣어도 된다.

       

      COUNT(*)

      : NULL 값이 포함된 값을 추출한다.

      COUNT(칼럼)

      : NULL 값을 제외하고 제외한 행의 개수만 추출한다.

       

      👏 중요

      AVG는 NULL값을 미포함하여 개산한다. NULL인 사람도 포함하고 싶으면 NVL을 사용하면 된다.

      SELECT AVG(jikwon_pay), AVG(nvl(jikwon_pay,0)) FROM jikwon;

       

       

      😊정리

      집계 함수는 NULL안의 자료를 연산에서 제외시킨다.

      집계함수는 GROUP BY절에서 많이 사용된다.

      GROUP BY는 기존의 테이블을 우리가 정한 기준으로 데이터를 하나로 합쳐준다.

      합쳐지며 상세 데이터들을 읽는 단점도 존재한다.

       

      문제를 많이 풀어보는 것을 추천한다.

      'SQL > sql 문법(mysql, mariaDB)' 카테고리의 다른 글

      2.JOIN _ inner, outer (+ on과 where의 차이)  (0) 2024.05.06
      1. JOIN _ CROSS JOIN, SELF JOIN, EQUI JOIN  (0) 2024.05.04
      UNION 코드로 알아보기  (0) 2024.05.02
      SELECT  (4) 2024.05.01
      INDEX 부여와 그 이유  (0) 2024.04.30
    Designed by Tistory.