2016-05-27 9 views
0

Ich habe einen Ergebnissatz, der nach einem Durchschnitt sortiert wurde.Auswahl des ersten und letzten Rangdurchschnitts

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 

Der nächste Teil ich brauche, ist das die erste und die letzte ist auf Platz mittelt und die Berufsbezeichnung für jede Gruppe LOCATION. Beispiel:

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

Gibt es eine einfache Möglichkeit, dies nur Redshift SQL zu tun mit? Nur ein FYI, das AVG-Feld ist als Aggregation in der Abfrage durchgeführt.

Antwort

0

Sie können den minimalen und maximalen Durchschnitt für jeden Standort berechnen und ihn mit der ursprünglichen Abfrage mit Durchschnitten verknüpfen, um die gewünschten Zeilen zu erhalten.

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

Sie können dies mit Fensterfunktionen tun:

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); 
Verwandte Themen