我想知道是否有任何函數可以在MySQL中用來從包含數值的列中選擇TOP X(或底部)百分比。在MySQL中爲數字值選擇TOP X(或底部)百分比
基本上,我有一個包含價格列表的列,我只想返回前十個百分點的價格領域。有什麼建議麼?
我想知道是否有任何函數可以在MySQL中用來從包含數值的列中選擇TOP X(或底部)百分比。在MySQL中爲數字值選擇TOP X(或底部)百分比
基本上,我有一個包含價格列表的列,我只想返回前十個百分點的價格領域。有什麼建議麼?
UPDATE:從更多的知道人here更多深思熟慮的解釋。儘管如此,在MySQL中似乎還沒有嵌入式函數來計算百分位數。
嘗試:
SELECT * FROM價格WHERE價格> =(SELECT 0.9 * MAX(PRICE)FROM價格)
SELECT price FROM prices p1 WHERE
(SELECT count(*) FROM prices p2 WHERE p2.price >= p1.price) <=
(SELECT 0.1 * count(*) FROM prices)
);
這將給價格用於記錄其數量P1在價格表有價格> = P1將在價格表中的記錄總數的十分之一。 之後:
SELECT * FROM prices WHERE price >= (SELECT price FROM prices p1 WHERE
(SELECT count(*) FROM prices p2 WHERE p2.price >= p1.price) <=
(SELECT 0.1 * count(*) FROM prices)
);
將返回所有需要的記錄。
注:我沒有檢查此查詢的性能,我認爲使用臨時表/變量的解決方案必須更有效。
回答Convert SQL Server query to MySQL
Select *
from
(
SELECT tbl.*, @counter := @counter +1 counter
FROM (select @counter:=0) initvar, tbl
ORDER BY ordcolumn
) X
where counter <= (50/100 * @counter);
ORDER BY ordcolumn
對於MySQL,你可以計算出所需的批量大小,然後限制到該號碼的記錄
SELECT @rows := ROUND(COUNT(*) * 10/100) FROM table;
PREPARE STMT FROM ‘SELECT * FROM tbl ORDER BY price LIMIT ?’;
EXECUTE STMT USING @rows;
對於底部%的,只是爲了在反向
SELECT @rows := ROUND(COUNT(*) * 10/100) FROM table;
PREPARE STMT FROM ‘SELECT * FROM tbl ORDER BY price DESC LIMIT ?’;
EXECUTE STMT USING @rows;
哎呀,也許DESC所屬的第一個查詢,但你的意思。
注 對於SQL Server中,TOP N PERCENT條款有一定的幫助
select top 10 PERCENT *
FROM TBL
ORDER BY price
只是作爲一個供參考(我知道這個問題是幾歲),這是可以做到其他的,更清潔的方式以及。
SELECT * FROM product_table WHERE price >= (SELECT price FROM product_table
ORDER BY price DESC LIMIT 1 OFFSET (SELECT 0.1 * COUNT(*) FROM product_table));
我對一個非常大的數據庫運行了一個類似的查詢,並且它運行得很快。
如果只有MySQL支持的分析 - 專門針對這種情況的NTILE,但是ROW_NUMBER,DENSE_RANK,LEAD和LAG ...您的查詢必須計算派生表/內嵌視圖中的百分位數,以便按其過濾/排序。 – 2011-01-19 21:59:00