2016-05-27 4 views
0

私は平均でランク付けされた結果セットを持っています。最初と最後のランク付け平均の選択

LOCATION  JOB TILE AVG RANK 
SEATTLE  PRESIDENT 10.2 1 
SEATTLE   VP  8.5  2 
SEATTLE  SN. VP  5.4  3 
CHICAGO  SALESMAN  7.6  1 
CHICAGO  ENGINEER  3.2  2 
CHICAGO  PRESIDENT 1.5  3 

私が必要とする次の部分は、最初と最後のランクの平均値と各LOCATIONグループの役職です。 例:

LOCATION JOBTITLE AVG 
SEATTLE PRESIDENT 10.2 
SEATTLE SN. VP  5.4 
CHICAGO SALESMAN 7.6 
CHICAGO PRESIDENT 1.5 

だけ赤方偏移SQLを使用してこれを行う簡単な方法はありますか?ちょうどFYI、AVGフィールドは、クエリ内で行われる集計としてです。

答えて

0

各ロケーションの最小および最大平均を計算し、平均を使用して元のクエリと結合して、目的のローを得ることができます。

with averages as (<your query>) 
,minandmax as (select location, min(avgcol) minavg, max(avgcol) maxavg 
       from averages 
       group by location) 
select a.location,a.job_title, a.avgcol 
from averages a 
join minandmax m on m.location = a.location and (m.maxavg=a.avgcol or m.minavg=a.avgcol) 
0

あなたは、このウィンドウ関数を使用して行うことができます。

with t as (
     <your query here> 
    ) 
select t.* 
from (select t.*, 
      max(rank) over (partition by location) as maxr 
     from t 
    ) t 
where rank in (1, maxr); 
関連する問題