我一直在使用搜索功能,但我认为我的问题的解决方案没有任何相关的问题(如果我错了,我会道歉)。
假设我们在MySQL中有一个简单的表,其模式非常简单:(MATERIAL varchar(10)主键,QUANTITY smallint)。并且具有如下行:(A,10),(B,8),(C,7),(D,4),(E,1),(F,1),(G,1)。所以我们有7个材料,总共32个项目。
我想要得到的是一个SELECT查询,只得到前两个材料(按数量排序),但这不是因为我知道我只想要两个,而是因为我知道我想要N个必要的材料,以获得50%的数量覆盖率。
因此,对于材料A,我得到10/32,这是不够的。对于材料B,我得到了18/32,因为这超过了50%,这就足够了。
在错误的语法中,为了更清楚起见,我希望是这样的:
按数量排序页签选择物料,DESC数量限制为50%;
你知道我如何用一个查询来实现这一点吗?
发布于 2010-03-26 01:57:55
不能,但您可以使用会话变量来模拟它:
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 2https://stackoverflow.com/questions/2518083
复制相似问题