我有一張包含數千行的表格,我想計算其中一個字段的第90百分位數,稱爲「圓形」。使用MySQL計算百分位數值
例如,選擇處於第90百分位的回合的值。
我在MySQL中看不到直接的方法。
有人可以提供一些關於如何開始這種計算的建議嗎?
謝謝!
我有一張包含數千行的表格,我想計算其中一個字段的第90百分位數,稱爲「圓形」。使用MySQL計算百分位數值
例如,選擇處於第90百分位的回合的值。
我在MySQL中看不到直接的方法。
有人可以提供一些關於如何開始這種計算的建議嗎?
謝謝!
http://www.artfulsoftware.com/infotree/queries.php#68
SELECT
a.film_id ,
ROUND(100.0 * (SELECT COUNT(*) FROM film AS b WHERE b.length <= a.length)/total.cnt, 1)
AS percentile
FROM film a
CROSS JOIN (
SELECT COUNT(*) AS cnt
FROM film
) AS total
ORDER BY percentile DESC;
這可以是非常大的表
先慢,讓我們假設你有一個表的值列。你想得到第95百分位值的行。換句話說,您正在尋找一個大於所有值的95%的值。
下面是一個簡單的答案:
SELECT * FROM
(SELECT t.*, @row_num :[email protected]_num + 1 AS row_num FROM YOUR_TABLE t,
(SELECT @row_num:=0) counter ORDER BY YOUR_VALUE_COLUMN)
temp WHERE temp.row_num = ROUND (.95* @row_num);
我試圖解決這個相當長的一段時間,然後我發現了以下的答案。老實說,輝煌。即使對於大桌子也是相當快的(我用它的桌子包含大約5密耳的記錄,需要幾秒鐘)。
SELECT
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(field_name ORDER BY
field_name SEPARATOR ','), ',', 95/100 * COUNT(*) + 1), ',', -1) AS DECIMAL)
AS 95th Per
FROM table_name;
正如你可以想象的只是用你的表和列的名稱替換table_name和field_name。
欲瞭解更多信息,請查看Roland Bouman的原帖
不回答這個問題 - 它檢索電影長度的自上而下的百分位排名。相反,我要求計算一個單一的值,這個值是第90個百分點的「圓」字段值。 –
使用'在百分位數在89和91之間' – exussum
當我運行這個時,我得到一個未知列b.length。你有鏈接到這個演示的源表數據? –