2015-07-19 16 views
0

我擁有龐大的數據庫,而且我需要使用group by的所有類別的平均值排名前90%。例如,我有300個位置,數據大約100k,TAT列針對所有碼頭,我需要使用group by(location)在一個查詢中取最小90%的平均TAT所有位置。SQL中針對組的最高90%平均數(ASC)

+1

您正在使用的數據庫。同時顯示一些示例數據和預期的輸出 –

+0

sql server 2014,通過percent_rank工作。謝謝 –

回答

2

大多數的DBMS支持窗口化聚合Fuctions,你需要PERCENT_RANK:

select location, avg(TAT) 
from 
(
    select location, TAT, 
     -- assign a value between 0 (lowest TAT) and 1 (highest TAT) for each location 
     percent_rank() over (partition by location order by TAT) as pr 
    from tab 
) as dt 
where pr <= 0.9 -- exclude the highest TAT amounts 
group by location 
+0

非常感謝dnoeth先生,你解決了這個問題。 我用領帶90%PERCENT,cume_dist但都是徒勞,再次感謝老闆。如果你告訴我percent_rank的邏輯, 會更加欣賞。 –

+0

@ VishanSingh:PERCENT_RANK是具有小於**當前值的行的百分比,而CUME_DIST使用**小於或等於**。請參閱http://developer.teradata.com/blog/dnoeth/2011/05/missing-functions-cume-dist-ntile – dnoeth