2016-10-02 3 views
0

Ich habe ein Szenario, wo ich die Nummer, die maximale Zeit pro Buchungskreis auftritt, erhalten muss. Das Problem ist, dass, wenn es zwei oder drei Nummern gibt, die gleich oft vorkommen, ich den Durchschnitt nehmen muss.Holen Sie sich die Zahlen, die maximale Zeit sql

Company Code Value 
----------------------- 
AA    2 
AA    2 
AA    3 
BB    5 
BB    5 
BB    7 
BB    7 
BB    9 

Im obigen Szenario sollte die Ausgabe

sein
  • AA 2 - Seit 2 zweimal auftritt, während 3 nur einmal auftritt.
  • BB 6 - Da für BB beide 5 & 7 auftritt 2, so muss ich den Durchschnitt nehmen.

Vielen Dank im Voraus

+3

** Ein Tipp **. Sie können in jedem Fall einen Durchschnittswert ermitteln, da der Durchschnittswert von nur einem Element der Wert des Elements ist. –

Antwort

1

In der folgenden Abfrage werden die folgenden Berechnungen durchgeführt, bevor die endgültige Ausgabe zu bekommen.

(i) Holen Sie sich die Anzahl auf dieser Partitionsebene (Company_Code, Value) und ordnen Sie einen Rang in absteigender Reihenfolge zu.

(ii) Sobald der Rang zugewiesen wurde, wählen Sie alle Zeilen mit Rang = 1 und Durchschnitt für jeden Company_Code aus.

SELECT Company_Code, 
     AVG(Value) 
    FROM 
    ( 
     SELECT Company_Code, 
       Value, 
       RANK() OVER (PARTITION BY 
          Company_Code,Cnt_Company_Code_Value 
          ORDER BY Cnt_Company_Code_Value DESC 
         ) 
      AS Rank_Company_Code_Value 
     FROM  
     (
      SELECT Company_Code, 
        Value, 
        COUNT(*) OVER (PARTITION BY Company_Code,Value) 
        AS Cnt_Company_Code_Value 
      FROM Table 
     ) 
    ) 
WHERE Rank_Company_Code_Value = 1 
GROUP BY Company_Code; 
Verwandte Themen