gpt4 book ai didi

mysql - 一个 id 的多个左连接

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:49 25 4
gpt4 key购买 nike

在 SQL 操作方面,我不是太高级。我有以下来自横幅系统的 4 个表格来宣传我的博客:

banners 
-id
-other irrelevant data

clicks
-id
-bid (banner id)
-other irrelevant data

exits (people who clicked on the banner and never used the blog or registered an account)
-id
-bid

postregistered (used the banner and register to the blog)
-id
-bid

现在我想生成一个简单的报告来显示 total number of clicks , exitsreg's对于每个横幅。

我试过这个:

SELECT COUNT(c.id) as clicks, COUNT(e.id) as exits, COUNT(r.id) as reg
FROM banners b
LEFT JOIN clicks c
ON c.bid = b.id
LEFT JOIN exits e
ON e.bid = b.id
LEFT JOIN registered r
ON r.bid = b.id
GROUP BY b.name

但它只会让 mysql 杀死我的处理器并且永远不会完成,没有足够的数据让它成为一个繁重的查询。

请你帮帮我,抱歉,如果这看起来很基础。

编辑:

我可以自己运行每个 Left join 并获得正确的结果,但我宁愿将其作为单个查询运行

最佳答案

您面临的问题是每个横幅的小笛卡尔积。简单来说,横幅 ID 不足以链接表格。

假设您有 10 个横幅。每个横幅有 100 次点击。在这些点击中,50 次是退出,50 次是注册。您可能认为您将从中获得大约 1000 行的内容。

不,您得到的是所有这些的乘积:10 * 100 * 50 * 50 = 2,500,000。这是很多处理。

您需要某种用户 ID 来跟踪用户从点击到退出和注册的过程。或者,您可以预先聚合您的查询:

select b.bid, b.name, numclicks, numexits, numreg
from banner b left outer join
(select bid, count(*) as numclicks
from clicks
group by bid
) c left outer join
on c.bid = b.bid join
(select bid, count(*) as numexits
from exits
group by bid
) e
on e.bid = b.bid left outer join
(select bid, count(*) as numreg
from postregistered
group by bid
) r
on r.bid = b.bid

关于mysql - 一个 id 的多个左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com