2013-08-22 3 views
3

나는 수의 열을 가지고 있으며이 열의 최대 값으로 나누기 위해 속도를 구합니다. 시도했으나 실패했습니다.sql은 열을 기준으로 최대 열을 나누어

select t.count/max(t.count) 
from table t 
group by t.count 

하지만 실패했습니다. GROUP BY를 사용하지 않고도 시도했지만 여전히 실패했습니다.

제 경우에는 배당금이 작동하지 않으므로 count를 내리고 첫 번째 배표를 선택하십시오. 제품 하위 카테고리 수에 차이가 있다고 생각하십시오. 각 제품 카테고리에 대해 하위 카테고리 수를 해당 카테고리의 최대 계수로 나누고 싶습니다. 나는 집계 함수를 피하는 방법을 생각할 수 없다. SQL의 모든 방언

답변

1

당신이 카테고리 당 MAX()를 원하는 경우에 당신은 상관 하위 쿼리가 필요합니다

select t.count*1.0/(SELECT max(t.count) 
        FROM table a 
        WHERE t.category = a.category) 
from table t 

을 또는 당신은 당신의 MAX()

PARTITION BY 필요
select t.count/(max(t.count) over (PARTITION BY category)) 
from table t 
group by t.count 
2

다음 작품 :

select t.count/(select max(t.count) from t) 
from table t 
group by t.count; 

참고 SQL의 일부 버전은 정수 나눗셈을 할, 그래서 결과가 될 것입니다 0 또는 1. 당신은 1.0 또는 주조에 의해 곱하면이 문제를 해결할 수 부유물에. SQL의

대부분의 버전도 지원합니다

select t.count/(max(t.count) over()) 
from table t 
group by t.count; 

같은주의해야 할 점은 정수 부문에 대해 적용됩니다.

+0

+1 분자와 분모를 바꿔야한다고 생각하지만. – Yuck

1

(당신이 집계하는 동일한 열을 그룹화하고 있기 때문에, 당신이 기대하는 방법을 작동하지 않을 수 있습니다 동일한 쿼리에 모두 포함) 당신은 max 가치를 창출하는 하위 쿼리를 사용하여 시도 할 수도 있습니다
Select t.count/(select max(sub.count) from table sub) 
from table t 
group by t.count 
관련 문제