-- 사용하신 쿼리는 복잡성을 떠나서, 결과가 틀렸습니다. 롤업을 빼야 맞겠죠.
-- 분석함수를 사용하시면 간단합니다.
SELECT human
, COUNT(*) cnt
, TRUNC(AVG(COUNT(*)) OVER()) avg_cnt
, DECODE(SIGN(COUNT(*) - TRUNC(AVG(COUNT(*)) OVER())), 1, '상', 0, '중'. -1, '하') grade
FROM testing
GROUP BY human
;