2010-03-25 55 views
1

我一直在使用搜索功能,但我認爲沒有任何與我的問題的解決方案相關的問題(如果我錯了,我很抱歉)。讓我們想象一下,在這個非常簡單的模式下,我們在MySQL中有一個簡單的表:(MATERIAL varchar(10)主鍵,QUANTITY smallint)。 (A,10),(B,8),(C,7),(D,4),(E,1),(F,1),(G,1)。所以我們有7個材料,共32個項目。在MySQL中,基於百分比設置類似於LIMIT的東西

我想要的是一個SELECT查詢來獲得2個第一材料(按數量排序),但不是因爲我知道我想要2個,但是因爲我知道我想要N個材料來獲得50個數量覆蓋率。

所以,材料A我得到10/32,這還不夠。在材料B中,我得到了18/32,並且超過了50%,這就夠了。

在一個錯誤的語法,只是儘量清晰,我想是這樣的:

SELECT材料標籤ORDER BY量DESC LIMIT 50%的量;

你有什麼想法我可以用一個查詢來實現這個嗎?

回答

2

沒有,但你可以使用會話變量效仿:

SELECT material 
FROM (
     SELECT material, @r := @r + 1 AS rn, 
       (
       SELECT COUNT(*) 
       FROM tab 
       ) AS cnt 
     FROM (
       SELECT @r := 0 
       ) vars, 
       tab 
     ORDER BY 
       quantity DESC 
     ) q 
WHERE rn < cnt DIV 2 
+0

它確實工作得很好我需要什麼。非常感謝您的回覆和時間,Quassnoi。 :-) – 2010-03-26 06:55:06

+0

當我第一次看到這個時,我不相信這會起作用,但是在搞亂它之後,它確實如此。真的很聰明+1 – 2011-08-17 17:41:03

相關問題