GROUP BY 응용
피봇 테이블
- 상환방식별 × 여신상태별 계좌 수
SELECT
REPAYMENT_METHOD,
COUNT(CASE LOAN_STATUS_CD WHEN '정상' THEN 1 END) AS 정상,
COUNT(CASE LOAN_STATUS_CD WHEN '연체' THEN 1 END) AS 연체,
COUNT(LOAN_STATUS_CD) AS 합계
FROM TB_LOAN_ACCOUNT
GROUP BY REPAYMENT_METHOD;
피봇 테이블
- 상환방식별 × 여신상태별 여신 잔액 합계
SELECT
REPAYMENT_METHOD,
SUM(CASE LOAN_STATUS_CD WHEN '정상' THEN LOAN_AMT ELSE 0 END) AS 정상,
SUM(CASE LOAN_STATUS_CD WHEN '연체' THEN LOAN_AMT ELSE 0 END) AS 연체,
SUM(LOAN_AMT) AS 합계
FROM TB_LOAN_ACCOUNT
GROUP BY REPAYMENT_METHOD;
GROUP BY와 CASE를 함께 사용
- 기업들을 고자산, 중자산, 저자산으로 나누어 기업 수와 평균 자산을 구함
SELECT
CASE WHEN TOTAL_ASSETS_RECENT >= 5000000000000 THEN '고자산'
WHEN TOTAL_ASSETS_RECENT < 5000000000000 AND
TOTAL_ASSETS_RECENT > 500000000000 THEN '중자산'
ELSE '저자산' END "분류",
COUNT(*), AVG(TOTAL_ASSETS_RECENT) FROM tb_company_master
GROUP BY
CASE WHEN TOTAL_ASSETS_RECENT >= 5000000000000 THEN '고자산'
WHEN TOTAL_ASSETS_RECENT < 5000000000000 AND
TOTAL_ASSETS_RECENT > 500000000000 THEN '중자산'
ELSE '저자산' END;
PARTITION BY
PARTITION BY:GROUP BY와 유사하지만, 전체 데이터 집합을 그룹화하지 않고, 각 행에 대해 집계 함수를 적용할 때 사용.
SELECT
BIZ_REG_NO,
INTEREST_RATE,
MIN(INTEREST_RATE)
OVER (PARTITION BY BIZ_REG_NO)
AS "회사별 최소 금리"
FROM TB_LOAN_ACCOUNT;
HAVING 절을 사용한 그룹 결과 필터링
HAVING절의 역할:GROUP BY절로 그룹화된 결과(즉, 집계 값)에 대한 조건을 지정하여 필터링.WHERE절과의 차이점:WHERE절: 그룹화 전 개별 행에 대한 조건 필터링. (FROM절 다음,GROUP BY절 이전)HAVING절: 그룹화 후 집계 결과에 대한 조건 필터링. (GROUP BY절 다음)
SELECT column_to_group_by, aggregate_function(column)
FROM table_name
WHERE individual_row_condition -- (선택 사항)
GROUP BY column_to_group_by
HAVING group_condition --(집계 함수에 대한 조건)
ORDER BY ...; -- (선택 사항)