表之间的聚合行数差异
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_id
s 只存在于一张表中?
不——我相信这些表之间的唯一区别应该是任何给定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
【讨论】:
以上是关于表之间的聚合行数差异的主要内容,如果未能解决你的问题,请参考以下文章