2012-11-01 3 views
3

데이터 테이블이 있습니다. 모든 값이 같은 범위에 있어야하기 때문에 수치 분석을 수행하고 싶습니다. 0..1. SQL 쿼리의 값 정규화

나는 이것을 달성 다소 느리고 longhanded 방법이 있지만, 내 문제에 더 straigt 앞으로 성능이 좋은 솔루션을 싶습니다

내가해야 할 것은 각 프로젝트와 projectid 에 의해

그룹 각 값의 평균을 취하여 전체 세트의 최대 평균으로 나눕니다.

목록이 가장 큰 평균 3

projectid | foo 
----------------- 
1   | 1 
1   | 2 
2   | 4 
2   | 2 

하고 결과가

0.5,1

곳이 될 그 때문에해야하는 경우 현재 나는

select avg(foo * 1.0)/ (Select MAX(IL) FROM (select avg(foo * 1.0) as IL from table group by  
              ProjectID) tbl) 
from table 

그래서이 첫 번째는 projectId 1의 평균을 3으로 나눈 값이고 두 번째 값은 projectId의 평균입니다. 2 내가 합계와 평균이 20 개 이상의 열이 음식을 장만 할 수있는 방법을 모두 사용하고 실제 시나리오에서는 3

답변

5

SQL FIDDLE EXAMPLE

select 
    Projectid, 
    avg(cast(foo as decimal(29, 2)))/max(avg(cast(foo as decimal(29, 2)))) over() 
from tbl1 
group by Projectid 
+0

예상되는 결과를 생성하지 않습니다. 결과는 0.333333이고 1 –

+0

입니다. 결과는 0.5와 1입니다. SQL Fiddle에서 확인했습니다. http://sqlfiddle.com/#!3/57a00/18 –

+0

이제는 맞지만 다시는 버전이 아닙니다. 표시 또는 의견을 썼을 때 바이올린 링크에 :) –

0
;with cte as 
(
    select projectid, AVG(foo) av 
    from yourtable 
    group by projectid 
) 
    select *, 
     av/(select MAX(av) from cte) 
    from cte 
+0

로 나눈? –