我一直在使用搜索功能,但我认为我的问题解决方案没有任何相关问题(如果我错了,我道歉)。
让我们假设我们在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;
您是否知道如何通过单个查询实现此目标?
答案 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