2014-07-07 90 views
3

以下查詢是我在網上找到的東西,似乎正確計算了中位數。然而,僅僅看着它,我不知道它是如何找到中位數的。能理解這個查詢的所有部分(cast,substring index,group concat,separator等)的人請向我解釋/分解這個查詢的工作原理?對mysql查詢的解釋

select CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(cost_per_unit ORDER BY 
cost_per_unit SEPARATOR ','),',', 50/100 * COUNT(*)), ',', -1) AS DECIMAL) 
AS '50th Percentile' from table 

任何和所有的幫助,歡迎!

感謝

回答

2

我會從內部開始,然後我的出路

GROUP_CONCAT(cost_per_unit ORDER BY cost_per_unit SEPARATOR ',') 

返回每個cost_per_unit作爲一個字符串由「」分開,下令值

即1, 2,3,4,4,5,6,7(7逗號)

SUBSTRING_INDEX(previous_value,',', 50/100 * COUNT(*)) 

返回','前一半的字符串 即1,2,3,4

SUBSTRING_INDEX(previous_value,',', -1), 

返回最後(第一向後) '' 即4

+0

完美之後的部分。非常感謝!! – user3760644