【问题标题】: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 我添加了一个输出

标签: mysql sql join count aggregate-functions


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2010-09-08
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多