2016-10-12 4 views
0

Table1이라는 샘플 테이블이 있습니다. 표에는 ID와 Age라는 두 개의 열이 있습니다. 연령대의 중앙값을 계산하고 싶습니다. 내가에 넣어 가지고이를 위해 SQL 쿼리 다음SQL을 사용하여 열에 대한 중앙값 계산

SELECT Age as Median FROM 
    (SELECT a1.Age, COUNT(a1.Age) Rank 
    FROM Table1 a1, Table1 a2 
    WHERE a1.Age < a2.Age OR a1.Age=a2.Age 
    group by a1.Age 
    order by a1.Age desc) a3 
    WHERE Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table1); 

하지만 난 무엇입니까 구문 오류

syntax error in query expression Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Table1) 

내가 MS 액세스와 SQL이 있다고 생각하지 않습니다

+1

어떤 DBMS를 사용하고 있습니까? –

+0

거기에는 이런 종류의 예제가 많이 있습니다. 아마도 당신은 검색 엔진이 없습니다. – Strawberry

+0

중간 값을 정의하십시오. –

답변

0

을 잃었에 위치를 알려주세요 DIV 연산자.

/ 2 (2로 나누기 double float) 또는 * 0.5 (반올림하여 고정 소수점 10 진수가 됨)을 사용하여 해결해야한다고 생각합니다. INT()을 사용하여 INT(0.9) == 0INT(-0.1) == -1이되도록하지만 항상 COUNT 집합 함수 (카디널리티)가 음수 값을 반환 할 수 없으므로이 값이 반올림 됨으로써 예상 결과를 얻습니다.

SELECT INT((COUNT(*) + 1)/2) FROM Table1 
0

다음 쿼리를 시도했습니다. 지금은 정상적으로 작동합니다.

SELECT Age as Median FROM 
    (SELECT a1.Age, COUNT(a1.Age) as Rank 
    FROM Table1 a1, Table1 a2 
    WHERE a1.Age < a2.Age OR a1.Age=a2.Age 
    group by a1.Age 
    order by a1.Age desc) a3 
    WHERE Rank =(SELECT INT((COUNT(*) + 1) *0.5) FROM Table1); 
관련 문제