【问题标题】:How do I randomly select 5% rows of each userid (column) in MySQL?如何在 MySQL 中随机选择每个用户 ID(列)的 5% 行?
【发布时间】:2012-08-21 06:59:08
【问题描述】:

如何使用 MySQL 随机选择每个 userid 列的 5% 行?

也就是说,mytable 包含 userid 列,我想随机检查每个用户输入的 5% 的行。所以查询应该返回每个用户行的 5%。

【问题讨论】:

  • 致反对者:尝试自己回答问题。这并不像你想象的那么简单。
  • @Jalpesh -----------我已经使用 java..通过将参数传递给查询来完成此操作...但这应该仅由 mysql quaries 完成..l已经使用 ORDER BY RAND() ..但是这个结果不包括每个用户的 5% ..如果你知道如何获得这些行帮助它
  • @jalpesh -- 以及更多仅供参考...在我在这方面进行了所有尝试之后,我已经发布了这个查询..
  • 请所有反对者回答这个问题......我的意思是我认为你已经反对,因为它有点容易......所以请回答这个问题
  • +1 以对抗来自另一个 Thilo 的无评论反对票

标签: mysql random-sample


【解决方案1】:

你可以说:

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)

【讨论】:

  • +1 花时间回答问题。我只是希望有一种更有效的方法来做到这一点(例如 Oracle 的 SAMPLE 选项)
  • SELECT * FROM mytable WHERE RAND()
  • @Praveen 添加一个where userID=(the users ID),它应该将其限制为用户的。
  • @Fluffeh 很好,但是有什么方法可以检索所有用户的 5% 数据
  • @Praveen 我确实花了一些时间考虑它,但是缺少存储过程或从您的代码中运行两个查询,我想不出比这里写的更好的解决方案。
【解决方案2】:

我通过使用事件得到了解决方案:

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 ;

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2012-12-21
    • 2015-01-13
    • 2010-11-19
    相关资源
    最近更新 更多