请原谅我无法发布某些问题的完整查询,但在查询中,如果我的内容不够,请在评论中回复,我可以重构完整的查询。我的最后一部分看起来像这样:
path p1
on as1.UpdateID = u_d1.UpdateID join
path p2
on p2.UpdateID = u_d2.UpdateID ;
我有另外一个像这样的查询
SELECT Count(People), UpdateID FROM path Group BY UpdateID;
我想在现有查询的最后一部分添加此查询。我试过这样的事情,但查询是永远的:
path p1
on p1.UpdateID = u_d1.UpdateID join
path p2
on as2.UpdateID = u_d2.UpdateID HAVING SUM(p2.People) = SUM(p1.People) ;
我首先尝试过“AND SUM(as2.People) = SUM(as1.People) ;
”但我认为这是错误的。
有没有这样做?如果需要更多信息,请在投票前询问。
答案 0 :(得分:1)
像这样,愚蠢和直截了当,用相应的查询替换“path”表
(SELECT Count(People) cnt, UpdateID FROM path Group BY UpdateID) as p1
on as1.UpdateID = u_d1.UpdateID join
(SELECT Count(People) cnt, UpdateID FROM path Group BY UpdateID) as p2
on p2.UpdateID = u_d2.UpdateID and p1.cnt = p2.cnt ;
但是,如果它能够工作,那将是缓慢而低效的 - MySQL在聚合查询上的性能很差。 更好的方法是使用预先计算的总和创建“缓存”表,然后加入该表。
像
INSERT cache_table (UpdateId, cnt)
SELECT UpdateID, Count(People) cnt FROM path Group BY UpdateID
on duplicate key update cache_table.cnt = values(cnt)
然后
cache_table as p1
on as1.UpdateID = u_d1.UpdateID join
cache_table as p2
on p2.UpdateID = u_d2.UpdateID and p1.cnt = p2.cnt ;
不要忘记定期更新cache_table。