2016-10-02 4 views
0

会社コードごとに最大時間が発生するシナリオがあります。問題は、同じ回数で発生する2つまたは3つの数字がある場合、平均をとる必要があるということです。最大時間が発生する番号を取得する

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

上記のシナリオでは、出力は

  • AA 2であるべきである - 図3は、一度だけ発生しながら2回発生するため。
  • BB 6 - BBのため両方5 & 7が発生するので、私は平均をとる必要があります。

以下のクエリで事前

+3

**ヒント**。あらゆる場合に平均を取ることができます.1つの要素の平均が要素の値になるためです。 –

答えて

1

のおかげでは、以下の計算は、最終的な出力を取得する前に行われます。

(i)このパーティションレベル(Company_Code、Value)でカウントを取得し、降順でランクを割り当てます。

(ii)ランクが割り当てられたら、ランク= 1のすべての行を選択し、各Company_Codeの平均を選択します。

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; 
関連する問題