下面的查询是我在网上找到的,似乎正确计算了中位数。然而,仅仅通过观察它,我不知道它正在做什么来找到中位数。可以理解这个查询的所有部分(演员,子串索引,组连续,分隔符等)的人请向我解释/分解这个查询是如何工作的?
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
欢迎任何和所有帮助!
感谢
答案 0 :(得分: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