钟东宁 2024-08-15 12:38 采纳率: 25%
浏览 2

关于#mysql#的问题:这个是显示一个月所有的充值信息

想请问一下,如何在我的储值卡表svc_dorecord每天的数据operatortypename="充值"中抽取随机部分数据operatorbalance这个是充值金额结果总和100万,我用聊天AI跑了很多都没有成功,怎么在mysql中直接查询解决

sql SELECT * FROM svc_dorecord WHERE modifiedDate BETWEEN '2023-01-01' AND '2023-02-01' AND operatortypename = '充值' 这个是显示一个月所有的充值信息,但是我想随机到每条,总和接近100万 operatorbalance这个是充值金额

  • 写回答

2条回答 默认 最新

  • 一直免费一直爽 2024-08-15 12:38
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要在MySQL中随机抽取部分数据,可以使用RAND()函数。但是,要确保总和接近100万,需要先计算满足条件的记录数,然后根据这个数量来调整抽样比例。以下是一个可能的解决方案:

    -- 首先计算满足条件的记录数
    SELECT COUNT(*) as total_count
    FROM svc_dorecord
    WHERE modifiedDate BETWEEN '2023-01-01' AND '2023-02-01'
    AND operatortypename = '充值';
    
    -- 假设上面的查询结果为total_count,那么可以按照以下方式进行抽样
    SET @total_count = (SELECT COUNT(*) FROM svc_dorecord WHERE modifiedDate BETWEEN '2023-01-01' AND '2023-02-01' AND operatortypename = '充值');
    SET @target_sum = 1000000; -- 目标总和
    SET @sample_ratio = @target_sum / @total_count; -- 抽样比例
    
    -- 使用抽样比例进行随机抽取
    SELECT *
    FROM svc_dorecord
    WHERE modifiedDate BETWEEN '2023-01-01' AND '2023-02-01'
    AND operatortypename = '充值'
    AND RAND() <= @sample_ratio;
    

    请注意,这种方法可能会导致实际抽取的数据总和略低于或高于100万,因为抽样是随机的。如果需要更精确的结果,可以考虑多次运行查询并汇总结果,或者使用其他方法(如在应用程序中处理)来确保总和接近100万。

    评论

报告相同问题?

问题事件

  • 修改了问题 8月15日
  • 修改了问题 8月15日
  • 创建了问题 8月15日