SQL GROUP BY and HAVING

2019-10-27

특정한 테이블에서 특정한 조건을 만족하는 데이터를 추출한 후 특정한 조건을 만족한 그룹화된 특정 열 및 집계함수를 나타냄. 원하는 행을 필터링할 때는 WHERE 조건절, 행이 아닌 그룹화된 변수에 대해 필터링할 경우에는 HAVING을 사용함. WHWERE 조건절의 조건은 데이터가 그룹화되기 전에 필터링하고, HAVING절의 조건은 데이터가 그룹화된 후 필터링함 즉, WHERE 조건절에 의해 1차 필터링된 대상을 그룹화하여 HAVING절이 2차 필터링하는 것임. 그룹화하면 데이터를 논리적 집합으로 나누어서 데이터의 특성을 요약할 수 있음.

Sample Table: PPC_MAST_201312

SSN ACCT_NO ACCT_CD PRFT BALANCE_AMT
123456789 1234 130 504 56000
987654321 4321 300 240 23534
  • ACCT_CD(수신): 100, 110, 120, 130, 140
  • ACCT_CD(여신): 300, 310, 320, 330, 340

위 테이블에서 자산과 부채를 구할경우 쿼리는 아래와 같음

SELECT CASE WHEN ACCT_CD IN (100, 110, 120, 130, 140) THEN 'LIABLLITY'
            WHEN ACCT_CD IN (300, 310, 320, 330, 340) THEN 'ASSET'
        END AS BALLANCE_SHHET,
        SUM(BALANCE_AMT) AS total_BALANCE_AMT
FROM PPC_MAST_201312
GROUP BY BALLANCE_SHEET
ORDER BY BALLANCE_SHEET;
BALANCE_SHEET TOTAL_BALANCE_AMT
ASSET 9909200
LIABILITY 38020000