통계관련 쿼리 문의 드립니다. 0 2 1,873

by 사랑초 [2014.03.06 09:00:51]


안녕하세요.
통계관련하여 쿼리를 작성하려고 합니다.

-- 조건은 아래 3개 항목입니다.
평균건수 < 개인건수 : 상
평균건수 = 개인건수 : 중
평균건수 > 개인건수 : 하

아래와 같이 SQL문을 작성을 하긴하였으나,
더 좋은 방안이 딱히 떠오르지 않아 뭔가 있을 것 같기도 하고해서...
SQL문에 대해 조언을 구하고자 합니다...

SELECT 
HUMAN,
CASE WHEN TRUNC(EE) < AA THEN '상'
WHEN  TRUNC(EE) = AA THEN '중'
WHEN  TRUNC(EE) > AA THEN '하'
END AS CNT
FROM
(
    SELECT
        COUNT(AA) AS CC, SUM(AA) AS DD, SUM(AA)/COUNT(AA) AS EE
    FROM 
    (
        SELECT HUMAN,
            COUNT(*) AA
        FROM TESTING
        GROUP BY ROLLUP(HUMAN)
    )
) A,
(
    SELECT 
        HUMAN, COUNT(*) AS AA  
    FROM TESTING
    GROUP BY HUMAN
) B

많은 지도 부탁드립니다.
감사합니다.
by 마농 [2014.03.06 09:47:52]
-- 사용하신 쿼리는 복잡성을 떠나서, 결과가 틀렸습니다. 롤업을 빼야 맞겠죠.
-- 분석함수를 사용하시면 간단합니다.
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
;

by 사랑초 [2014.03.06 12:41:50]
감사합니다.!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입