MySQL:WHERE子句中的SUM

时间:2010-06-07 11:18:01

标签: mysql

我有这张桌子

CREATE TABLE `subevents` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(150) DEFAULT NULL,
  `content` text,
  `class` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM

每一行在“class”字段中可以有不同的值。

我想选择任意数量的行,只要“class”字段中的值总和等于100,就可以随机排序。

如何直接在MySQL查询中完成它而不用稍后在PHP中执行它?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

通过“随机排序”我假设您的意思是行的顺序无关紧要,但不能多次使用行。因此,您正在寻找class之和等于100的行组合。使用强力方法。随机生成可能的解决方案,直到找到有效的解决方案。

delimiter //
CREATE PROCEDURE subsetsum(total)
BEGIN
    DECLARE sum INTEGER;
    REPEAT
        CREATE OR REPLACE VIEW `solution`
        AS SELECT * FROM `subevents`
            WHERE 0.5 <= RAND();
        SELECT SUM(`class`) INTO sum FROM `solution`;
    UNTIL sum = total END REPEAT;
END
//
delimiter ;
CALL subsetsum(100); /* For example */
SELECT * FROM `solution`;

我已经使用具有随机值的TINYINT列的表进行了测试,实际上速度相当快。唯一的问题是无法保证subsetsum()将永远返回。

答案 1 :(得分:0)

我认为只有SQL才有可能......我想到的唯一一件事就是重做sql查询,只要总和不是100

但我不知道如何一次选择随机行数。