如何使用 MySQL 随机选择每个用户 ID 列的 5% 行?
也就是说,mytable 包含 userid 列,我想随机检查每个用户输入的 5% 的行。所以查询应该返回每个用户行的 5%。
如何使用 MySQL 随机选择每个用户 ID 列的 5% 行?
也就是说,mytable 包含 userid 列,我想随机检查每个用户输入的 5% 的行。所以查询应该返回每个用户行的 5%。
你可以说:
SELECT * FROM mytable ORDER BY RAND() LIMIT 5
如果您知道表中有 100 行。
如果你不知道,你可以先试试这个查询来找出:
SELECT COUNT(*) FROM mytable
否则,您也可以尝试:
SELECT * FROM mytable WHERE RAND() < 0.05 ORDER BY RAND()
这会选择大约 5% 的所有行(但它有点随机,因为它基本上选择有 5% 机会的行)。
否则,您可以使用子查询:
SELECT * FROM mytable ORDER BY RAND() LIMIT (SELECT COUNT(*) FROM mytable)
我通过使用事件得到了解决方案:
drop event OEAuditEvent;
DELIMITER $$
CREATE EVENT OEAuditEvent
ON SCHEDULE EVERY 1 SECOND
STARTS '2012-09-05 09:00:00'
DO
BEGIN
DECLARE a CHAR(20);
DECLARE b,c,d INT;
DECLARE done INT DEFAULT FALSE;
IF CURRENT_TIME() = '23:40:00' THEN
begin
DECLARE cur CURSOR FOR select OE_User,count(OE_User) from RNCM_Status where date(OE_Date)=CURDATE() group by OE_User;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO a, b;
SET c=ceil((b*5)/100);
IF done THEN
LEAVE read_loop;
ELSE
insert into OE_Audit(MDN,CAF,UploadedDate,OEUser,OEDate,UserCount,QCCount,intime) select MDN,CAF,UploadedDate,OE_User,OE_Date,b,c,now() from RNCM_Status where OE_User=a and date(OE_Date)=CURDATE() order by rand() limit c;
END IF;
END LOOP;
CLOSE cur;
end ;
END IF;
END $$
DELIMITER ;