gpt4 book ai didi

MySQL JOIN 忽略结果中的 COUNT 个

转载 作者:行者123 更新时间:2023-11-29 12:59:42 25 4
gpt4 key购买 nike

我正在尝试执行如下所示的 JOIN 操作。我只想要 property_res 表中至少有 X 个电子邮件地址的记录。例如,当我将 acount 值从 10 更改为 20 时,返回的结果仍为 949 条记录。这应该会显着减少,因为 r.EmailAddress 被找到 20 次的匹配应该会少很多。在 varchar 数据类型上使用 COUNT 是否有限制?实现这一目标的最佳方法是什么?

SELECT 
r.FirstName AS ag_fname,
r.LastName AS ag_lname,
r.EmailAddress AS ag_email,
COUNT(r.EmailAddress) AS `acount`
FROM property_res e
LEFT JOIN ActiveAgent_Matrix r
ON e.ListAgentMLSID=r.MemberNumber
WHERE e.ListPrice >= 50000
GROUP BY r.EmailAddress
HAVING acount >=20

数据的示例输出显示 acount 的值很奇怪,因为我认为这将是电子邮件地址的计数,但它们都是相同的?

ag_fname | ag_lname | ag_email      | acount
Jane | Doe1 | jdoe1@doe.com | 3390
Jane | Doe3 | jdoe3@doe.com | 3390
Jane | Doe4 | jdoe4@doe.com | 3390
Jane | Doe5 | jdoe5@doe.com | 3390

最佳答案

发生的情况是您的加入条件不够具体(或者实际上多个电子邮件可以与同一个 ID 关联,反之亦然,在这种情况下您的 GROUP BY 不够具体)。我怀疑是前者,并且您的结果集正在爆炸式增长。不完全是笛卡尔连接,但类似。

尝试使用以下两个查询进行故障排除:

SELECT 
r.EmailAddress,
COUNT(*)
FROM property_res e
LEFT JOIN ActiveAgent_Matrix r
ON e.ListAgentMLSID=r.MemberNumber
GROUP BY r.EmailAddress
HAVING COUNT(*) > 1;

SELECT
e.ListAgentMLSID,
COUNT(*)
FROM property_res e
LEFT JOIN ActiveAgent_Matrix r
ON e.ListAgentMLSID=r.MemberNumber
GROUP BY e.ListAgentMLSID
HAVING COUNT(*) > 1;

其中一个(或两个)结果集将不为空。这很重要,因为这意味着这个连接条件: ON e.ListAgentMLSID=r.MemberNumber 不够具体。每个 ListAgentMLSID 有多个电子邮件,或者每个电子邮件地址有多个 ListAgentMLSID...或两者都有。

为了解决这个问题,我首先尝试确定“每个 Y 的多个 X”在哪里。上面的查询实际上应该可以帮助您做到这一点。第一个将识别与多个 ID 关联的电子邮件。第二个将帮助您识别与多个电子邮件关联的 ID。您需要问自己的问题是,多个电子邮件是否应该与任何给定的 ID 相关联?或者是否应该将多个 ID 与任何给定的电子邮件相关联?如果允许,请更改您的 GROUP BY。如果不是,请更改您的加入条件。

这可能就像加入 ID 和电子邮件一样简单...但如果不是,那么您也需要按电子邮件进行分组(如上面评论中的建议...这很好,如果确实如此)应该允许多个电子邮件与一个 ID 关联,反之亦然),或者您需要添加一个足够具体的附加连接条件,以防止不应连接的数据被连接。

希望这有帮助。

关于MySQL JOIN 忽略结果中的 COUNT 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520546/

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