2017-03-20 1 views
0

테이블에서 중앙값을 찾는 쿼리를 작성했습니다. 표는 내가 성공적으로 53.5집계 함수가 예상대로 작동하지 않습니다.

SELECT AVG(median) 
FROM (
     SELECT a.rs median 
     FROM med a, 
      med b 
     GROUP BY a.rs 
     HAVING SUM(CASE 
         WHEN b.rs<=a.rs THEN 1 
         ELSE 0 
        END)>=(COUNT(*)/2) 
     AND  SUM(CASE 
         WHEN b.rs>=a.rs THEN 1 
         ELSE 0 
        END)>=(COUNT(*)/2)); 

그러나 골재를 사용하여이 106 자연수의 중간을 찾기 위해 쿼리를 실행 (106)

CREATE TABLE med 
AS (SELECT rs 
    FROM (SELECT rownum rs 
      FROM employees 
      WHERE employee_id<=106)); 

1에서 연속 자연수를 포함하는 하나의 열을했다 이 같은 하위 쿼리를 사용하지 않고 기능 AVG :

SELECT AVG(a.rs) median 
     FROM med a, 
      med b 
     GROUP BY a.rs 
     HAVING SUM(CASE 
         WHEN b.rs<=a.rs THEN 1 
         ELSE 0 
        END)>=(COUNT(*)/2) 
     AND  SUM(CASE 
         WHEN b.rs>=a.rs THEN 1 
         ELSE 0 
        END)>=(COUNT(*)/2) 

다음이 53.5로 예상되는 출력을 제공하지 않습니다

는 오히려 왜 그렇게 53, 54 등의 출력을 제공?

하위 쿼리와 함께 첫 번째 쿼리에, 당신은 실행 하위 쿼리 집계 함수없이 두 번째 쿼리에 값 53, 54

사이의 평균을 계산되어 있지만 separatly 각각의 값에 수행되기 때문이다

+0

, 샘플 데이터 및 예상 출력을 제공하십시오. – Mansoor

+0

@Mansoor 테이블에는 rs라는 단일 열이 있으며 1부터 106까지의 연속적인 자연수로 구성됩니다. – PiyushM

+0

열 데이터 형식? – jarlh

답변

0

의미 AVG (53) 및 AVG (54). 그래서 2 행을 다시 얻는 것입니다.

나는 그것이 당신에게 분명 희망입니다.

관련 문제