초록꼬마의 devlog
article thumbnail
Published 2023. 9. 4. 01:19
[SQL] GROUP BY back-end dev/database

🌿 GROUP BY절

  • 그룹을 묶어줄 기준을 제시할 수 있는 구문
  • 여러 개 값들을 그룹별로 나눠서 처리할 목적으로 사용
  • GROUP BY절과 함께 GROUP 함수 자주 사용함
-- 문제 = 각 부서별 총 급여 합을 부서별 오름차순 정렬해서 조회
SELECT DEPT_CODE, SUM(SALARY) -- 실행순서3: 그룹별 급여 합 계산됨
FROM EMPLOYEE -- 실행순서1: 가장 먼저 테이블에 감
GROUP BY DEPT_CODE -- 실행순서2
ORDER BY DEPT_CODE; -- 실행순서4

-- 문제 = 성별별 사원 수(+평균 급여) 조회
SELECT DECODE(SUBSTR(EMP_NO, 8, 1), '1', '남성', '2', '여성') "성별" -- 단일행함수 DECODE를 통해 조건에 따른 결과 반환(-> 1, 2의 의미 명시) + 컬럼명 별명
    , COUNT(*) "사원 수"
    , ROUND(AVG(SALARY)) "평균 급여"
FROM EMPLOYEE
GROUP BY SUBSTR(EMP_NO, 8, 1); -- 함수를 이용해서 그룹을 나눌 수도 있음

🌿 HAVING절

  • 그룹에 대한 조건을 제시하고자 할 때 사용되는 구문
  • 대부분의 경우 그룹 함수를 가지고 조건 제시
-- 문제 = 각 부서별 보너스를 받는 사원이 없는 부서만을 조회
SELECT DEPT_CODE
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING COUNT(BONUS) = 0; -- 보너스 받는 사람이 없음

실행 순서
5번: SELECT *(전체)/조회하려는 컬럼/산술연산/함수식 (AS) "별명"
1번: FROM 조회하고자 하는 테이블
(JOIN)
2번: WHERE 조건식; 조건이 많은 경우 앞에서부터, 단 연산자 우선순위에 따라(e.g. AND -> OR).. 중첩함수는 안쪽 괄호부터..
3번: GROUP BY 그룹 기준에 해당하는 컬럼명/함수식; GROUP을 지어주고 조건을 주어야 하는데 실행 순서에 따라 WHERE절이 GROUP BY절보다 앞에 오는 바 WHERE절을 사용할 수는 없으므로, GROUP을 지어주는 경우 WHERE절 대신 HAVING절 사용함
4번: HAVING 그룹 함수식에 대한 조건식 -> 조회하고자 하는 컬럼(조건) 걸러냄
6번: ORDER BY 정렬 기준에 해당하는 컬럼명/별칭/컬럼순번 ASC/DESC NULLS FIRST/LAST;

cf. SQLD 공부할 때는 GROUP BY로 그룹 지어주더라도 WHERE로 조건 제시하는 예시도 봤음 → 위 설명(KH 수업 내용)은 참고만 하자

'back-end dev > database' 카테고리의 다른 글

재귀적/자기참조/순환 관계  (0) 2023.07.18
데이터베이스 모델링 실습 중 궁금한 점  (0) 2022.10.07
OSX DBeaver 설치 및 세팅  (0) 2022.10.06
MySQL 설치 및 세팅  (0) 2022.10.06
[knou] 정규화  (0) 2022.07.20