gpt4 book ai didi

mysql - 8 表连接和选择 count(distinct()) 未正确返回

转载 作者:行者123 更新时间:2023-11-30 00:15:06 24 4
gpt4 key购买 nike

表格:

User
UserId

UserRelation
UserRelationId | ManagerUserId (fk to User.UserId) | UserId

UserBusinessRelation
UserBusinessSaleId | BusinessId | UserId

Business
BusinessId

CampaignGroup
CampaignGroupId | BusinessId

Campaign
CampaignId | CampaignGroupId

Adgroup
AdgroupId | CampaignId

AdgroupKeyword
AdgroupKeywordId | AdgroupId

Click
ClickId | AdgroupKeywordId | Time (Unix Time, Double, Unsigned)

ClickAction
ClickActionId | ClickId | Time (unix time Double, Unsigned)

每一列中的第一列都是主键,自动增量

问题:在充分了解每个企业和数百个企业可能轻松获得十万次点击的情况下,我该如何以最有效的方式加入这些企业?

这是我的查询:

从 ClickAction ca 选择 count(distinct(ca.ClickActionId)), count(distinct(cl.ClickId))
内部联接 Click cl on cl.ClickId=ca.ClickId
在 ak.AdgroupKeywordId=cl.AdgroupKeywordId 上内部加入 AdgroupKeyword ak
在 a.AdgroupId=ak.AdgroupId 上内部加入广告组 a
在 c.CampaignId=a.CampaignId 上内部加入营销事件 c
在 cg.CampaignGroupId=c.CampaignGroupId 上内部加入 CampaignGroup cg
b.BusinessId=cg.BusinessId 上的内部联接业务 b
在 ubs.BusinessId=b.BusinessId 上内部加入 UserBusinessSale ubs
在 ur.UserId=ubs.UserId 上内部加入 UserRelation ur
其中 ur.ManagerUserId=3

问题是我返回: Array ( [0] => stdClass Object ( [count(distinct(ca.ClickActionId))] => 38290 [count(distinct(cl.ClickId)) ] => 38290 ) )...我绝对知道这是不正确的,因为点击次数比 clickActions 更多(可能至少多 10 倍)

最佳答案

首先,人际关系似乎出了问题——生意真的有必要吗?看起来您正在通过 UserBusinessRelation 和 CampaignGroup 的两个外键加入它们。隔离计数 - 运行 SQL 两次,每个计数语句运行一次,看看是否得到任何不同的结果。

另外,我同意 Tony Hopkinson 的观点 - 如果您尝试计算尚未点击的 clicksActions,那么您将需要外部联接。再看一遍,您的 click/clickAction 关系可能会向后。clickAction 依赖于点击的存在。

如果计数(不同列)独立工作,您可能最好一个接一个地运行两个查询,甚至在一个事务中运行两个查询,因为 mySql 已经缓存了计数所需的表的索引。

关于mysql - 8 表连接和选择 count(distinct()) 未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714948/

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