表之间的聚合行数差异

Posted

技术标签:

【中文标题】表之间的聚合行数差异【英文标题】:Aggregated row count differences between tables 【发布时间】:2021-10-21 05:21:15 【问题描述】:

我有两个 mysql 表 A 和 B 都使用这个模式

ID entity_id asset asset_type
0 12345 x 1
.. ......... ..... ..........

我想获得两个表之间最大行数差异的聚合前 10/50/whatever entity_ids。我认为我可以手动执行此操作,只需通过entity_id 获取最高行数,就像这样

select count(*), entity_id
-> from A
-> group by entity_id
-> order by count(*) desc;

并且只是手动比较表 B 的相同查询,但我想知道是否有一种方法可以在一个查询中执行此操作,即比较每个不同 entity_id 的行数并汇总行数之间的差异。一些注意事项

entity_id 上有两个表的索引 对于每个entity_id,表 B 将始终具有相同或更多的行数

样本输出

entity_id difference
12345 100
3232 75
5992 40
and so on for top 10/50

【问题讨论】:

是否有任何entity_ids 只存在于一张表中? 不——我相信这些表之间的唯一区别应该是任何给定entity_id的行数 请提供示例输出......表及其差异的实体 id 明智计数......如果差异为负则...... 道歉@RahulBiswas 我添加了一个输出 【参考方案1】:

在每个表中聚合并加入结果以获得差异:

SELECT a.entity_id, b.counter - a.counter diff
FROM (SELECT entity_id, COUNT(*) counter FROM A GROUP BY entity_id) a
INNER JOIN (SELECT entity_id, COUNT(*) counter FROM B GROUP BY entity_id) b
ON a.entity_id = b.entity_id
ORDER BY diff DESC LIMIT 10

【讨论】:

以上是关于表之间的聚合行数差异的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB聚合:计算数组元素或距离之间的差异

Django中日期时间字段之间的聚合差异

Pandas Dataframe groupby 聚合函数和动态列的最大值和最小值之间的差异

spark中密集等级和行数的差异

代理和装饰模式之间的差异

找出具有相同形状的两个DataFrame之间的差异