2016-10-02 16 views
0

我有一個場景,我必須得到每個公司代碼發生最大時間的數字。問題是,當有兩個或三個數字出現相同次數時,我必須取平均值。獲取最大時間發生的數字sql

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

在上述情況下,輸出應該是

  • AA 2 - 由於2,而3只發生一次發生兩次。
  • BB 6 - 因爲BB兩個5 & 7發生2所以我必須取平均值。

在此先感謝

+3

**小費**。您可以在每種情況下取​​平均值,因爲只有一個元素的平均值將是元素的值。 –

回答

1

在下面的查詢中,以下計算所得到的最終輸出之前完成。

(i)獲取此分區級別的計數(Company_Code,Value)並按降序分配排名。 (ii)一旦排列被分配,選擇rank = 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;