-1

MySQLを使用して各userid列の5%行をランダムに選択するにはどうすればよいですか?

つまり、mytableにはuserid列が含まれており、入力された行の各ユーザーの5%をランダムにチェックしたいと思います。したがって、クエリは各ユーザーの行の5%を返す必要があります。

4

2 に答える 2

7

あなたは言うことができます:

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)
于 2012-08-21T07:04:00.527 に答える
-1

イベントを使用して解決策を得ました:

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 ;
于 2012-09-17T12:48:43.927 に答える