【问题标题】:creating a random subset of a table with an average number of counts per keys创建表的随机子集,每个键的平均计数数
【发布时间】:2021-07-20 06:17:27
【问题描述】:

我有一个数据库,其中包含 10 亿个 key val 对和 2000 万个唯一 keys。平均而言,每个key 与 50 个vals 相关联。

key  val
key1 val1
key1 val2
key1 val3
key2 val2
key2 val7
.
.
.

我运行了以下命令,得到了每个唯一 keyvals 数量的标准偏差。

select avg(cnt), stddev(cnt)
  from (select count(key) as cnt, key
        from original_db)

这给出了 avg(cnt) = 50 和 stddev(cnt)=137

我想从此表中创建keys 的子集,这样子集的 avg(cnt) 为 100。这意味着平均而言,子集表中的每个唯一键都与~ 100 个值。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以聚合并使用累积平均值来计算运行平均值:

    select key
    from (select key, count(*) as cnt,
                 avg(count(*)) over (order by cnt desc, key) as running_avg
          from t
         ) t
    where running_avg >= 100;
    

    换句话说,这需要所有具有 100+ 值的键,然后在累积平均值为 100 或以上时继续取较小的数字。

    请注意,如果没有键有 100 个值,这可能不会返回任何键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2013-03-07
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      相关资源
      最近更新 更多