我試圖找到一個解決方案,沒有運氣。Percentile_disc()非循環值
在我的查詢中,即時選擇count(*)
和percentile_disc(.9)
找到這個的第90個位置。 情況是,當計數爲29時,第90百分位數比第27位數接近於27,但仍返回第27個對象。
有什麼辦法可以說,如果5 <第< 10減1的結果?
表參考
ID Count 90th
-------------------
1 50 45
2 40 36
3 27 25 <-- Should be 24
4 9 9 <-- Should be 8
90%的9爲0.9,它應該刪除1和所得8.
---直到這是我的第N個百分位數的理解---
現在我所擁有的:
我的表有一些條目(每天+ 100k),所以我想每天運行這個查詢。
Service_id start_time end_time
-------------------------------------
Service1 1499025651614 1499025651648
Service2 1499025655145 1499025655434
Service3 1499025656029 1499025656112
Service2 1499025658755 1499025659135
Service3 1499025726862 1499025728346
Service1 1499025748782 1499025750032
Service3 1499025749277 1499025749900
Service3 1499025757681 1499025758517
Service2 1499025775000 1499025775101
Service1 1499025785556 1499025785633
...
我有一個查詢,選擇最小,最大和平均爲每個服務
select mt.SERVICE_ID as SERVICE_ID,
count(*) as COUNT,
round(avg((mt.end_time - mt.start_time)/1000), 2) as Avg,
round(min((mt.end_time - mt.start_time)/1000), 2) AS Min,
round(max((mt.end_time - mt.start_time)/1000), 2) AS Max
from myTable mt
group by mt.service_id
我想結合使用連接之前discused 90個百分點。
select service_id, round(percentile_disc(.90) within group(order by elapsed), 2) as perc
from (select mt.service_id, ((mt.end_time - mt.start_time)/1000) as elapsed
from myTable mt)
group by service_id
問題來當計數(可以說)9,在這種情況下,MAX
和Perc
是相同的(由於百分沒有刪除任何東西),但我需要在這個特殊的情況下,刪除最後一個,給我的結果8號位置的調整。
在這種情況下,有任何方法可以刪除一個位置?
請提供[MCVE ]包括您的表的DDL語句,DML語句(例如說明您的問題和您的預期輸出的示例數據)(詳細描述預期輸出的邏輯)。目前,您問題中的文字描述與「參考表格」不匹配,也不符合您的查詢,因此尚不清楚您嘗試實現的內容。 – MT0
@MT0增加了更多數據,希望對澄清已經足夠了。謝謝 –