MySQLを使用して各userid列の5%行をランダムに選択するにはどうすればよいですか?
つまり、mytableにはuserid列が含まれており、入力された行の各ユーザーの5%をランダムにチェックしたいと思います。したがって、クエリは各ユーザーの行の5%を返す必要があります。
MySQLを使用して各userid列の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 ;