我有一个场景,我必须得到每个公司代码出现最长时间的数字。问题是,当有两个或三个数字出现相同的次数时,我必须取平均值。
Company Code Value
-----------------------
AA 2
AA 2
AA 3
BB 5
BB 5
BB 7
BB 7
BB 9
在上面的场景中,输出应为
提前致谢
答案 0 :(得分: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;