在MySQL中根据百分比设置类似于LIMIT的东西

时间:2010-03-25 17:52:22

标签: mysql limit

我一直在使用搜索功能,但我认为我的问题解决方案没有任何相关问题(如果我错了,我道歉)。

让我们假设我们在MySQL中有一个简单的表,使用这个非常简单的模式:( MATERIAL varchar(10)主键,QUANTITY smallint)。并且具有如下行:(A,10),(B,8),(C,7),(D,4),(E,1),(F,1),(G,1)。所以我们有7种材料,总共32种。

我想得到的是一个SELECT查询,只获得2个第一个材料(按数量排序)但不是因为我知道我想要2但是因为我知道我想要N个材料需要50%覆盖数量。

所以,使用材料A我得到10/32并且这还不够。使用材料B我得到18/32,而且超过50%,这就足够了。

在错误的语法中,为了更清楚,我想要像:

SELECT material FROM tab ORDER BY quantity DESC LIMIT 50%ON quantity;

您是否知道如何通过单个查询实现此目标?

1 个答案:

答案 0 :(得分: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