안녕하세요 항상 눈팅으로 지식을 배워가다가 해결이 안되는 문제가 있어 글 남겨봅니다
지금 평균의 평균을 구하고 있는데요
예시를 학생으로 들겠습니다..
학생의 평균점수를 구하고 그 전체 학생들의 평균을 구하는 중인데
문제는 일부 학생들의 데이터는 보여주되, 평균계산에서는 제외해야 하는 상황입니다
이름 평균
김씨 80.00
이씨 90.00
박씨 88.00
최씨 93.00
정씨 72.00
가씨 68.00 -- 전체 평균 계산에서 제외
나씨 55.00 -- 전체 평균 계산에서 제외
평균 84.60
위 처럼 표현하고 싶은데요...
UNION을 사용하지 않고는 방법이 없는걸까요?
현재 사용한 쿼리는 아래와 같습니다
SELECT STDT_NM , ROUND(AVG(STDT_SC), 2) AS STDT_AVG FROM TB_STDT WHERE 1=1 AND STDT_NM NOT IN ('가씨', '나씨') GROUP BY ROLLUP (STDT_NM) UNION SELECT STDT_NM , ROUND(AVG(STDT_SC), 2) AS STDT_AVG FROM TB_STDT WHERE 1=1 AND STDT_NM IN ('가씨', '나씨') GROUP BY STDT_NM
실제 사용하는 쿼리는 아니지만 최대한 맞게 바꿔보았습니다
SELECT stdt_nm , ROUND( DECODE(GROUPING(stdt_nm), 0, AVG(stdt_sc) , AVG(CASE WHEN stdt_nm NOT IN ('가씨', '나씨') THEN stdt_sc END) ), 2) AS stdt_avg FROM tb_stdt GROUP BY ROLLUP(stdt_nm) ;
SELECT stdt_nm , stdt_sc AS stdt_avg FROM tb_stdt UNION ALL SELECT Null , AVG(stdt_sc) FROM tb_stdt WHERE stdt_nm NOT IN ('가씨', '나씨') ;