mysql - 创建具有每个键的平均计数的表的随机子集
问题描述
我有一个包含 10 亿key
val
对和 2000 万个唯一key
s 的数据库。平均而言,每个key
都与 50val
秒相关联。
key val
key1 val1
key1 val2
key1 val3
key2 val2
key2 val7
.
.
.
我运行了以下命令,得到了val
每个 unique 的 s数量的标准偏差key
。
select avg(cnt), stddev(cnt)
from (select count(key) as cnt, key
from original_db)
这给出了 avg(cnt) = 50 和 stddev(cnt)=137
我想key
从这个表中创建一个 s 的子集,使得子集的 avg(cnt) 为 100。这意味着平均而言,子集表中的每个唯一键都与平均约 100 个值相关联。
解决方案
您可以聚合并使用累积平均值来计算运行平均值:
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 个值,这可能不会返回任何键。
推荐阅读
- python - 对于不平衡的二元分类模型,我应该使用哪个指标?
- reactjs - xterm 可以在 React Native 中使用吗?
- mysql - 自加入提供错误答案
- sql - SQL中是否可以有常量函数参数?
- python - 使用 ChArUco-Board 的 OpenCV StereoCalibration 提供了错误的值
- python - 将内部数组另存为来自 2D 外部数组的图像
- fabricjs - 通过数字输入更改对象属性(左侧、顶部、半径等)后出现奇怪的“鼠标悬停”行为
- c# - C# CimSession.TestConnection 方法在主机离线时没有响应
- javascript - 无法理解 for 循环
- csv - 将 2 个文件夹与 .CSV 输出进行批量比较