gpt4 book ai didi

php - MySQL - 如何选择主键多次出现并且至少有一个其他字段匹配的行?

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

我有 2 个表(注册者和网络广播),其中包含参加我公司网络广播的人员的信息。注册者表显示有关网络广播注册者的信息,包括他们的电子邮件地址、姓名、网络广播标题、网络广播客户端等。网络广播表显示有关网络广播的详细信息,包括网络广播标题、日期和客户端。

我们的客户希望了解用户何时参加了多次网络广播。我将这些信息与来自特定网络广播的分析仪表板结合起来显示。我需要的是能够在表中找到以下用户:
1.参加该公司的多次网络广播
2.至少他们参加的网络广播之一必须是显示仪表板的网络广播

现在,我有代码可以查找参加该公司多次网络广播的用户。我缺少的是用于过滤和显示参加该公司多个网络广播的用户的代码,并且至少有一个网络广播是当前的网络广播。

我们在此示例中使用公司名称“Company”和网络广播标题“Learning About Company”

SELECT *
FROM registrants
INNER JOIN webcasts ON registrants.WebcastTitle = webcasts.WebcastTitle
INNER JOIN (
SELECT Email, Client
FROM registrants
GROUP BY Email, Client
HAVING count(*) > 1
) dup ON registrants.Email = dup.Email
WHERE registrants.Client = 'Company' AND registrants.FirstName != ''
ORDER BY registrants.Email;

这将返回参加过该公司多次网络广播的所有用户。剩下的事情有人能帮我吗?

谢谢!

更新

感谢下面 FuzzyTree 的帮助,我有了一个有效的查询。对于任何对类似问题感兴趣的人,这就是我的想法:

SELECT *
FROM registrants
INNER JOIN webcasts ON registrants.WebcastTitle = webcasts.WebcastTitle
INNER JOIN (SELECT registrants.Email
FROM registrants
WHERE registrants.Client = 'Salient' AND registrants.FirstName != ''
GROUP BY registrants.Email
HAVING COUNT(*) > 1
AND SUM(registrants.Client = 'Salient' AND
registrants.WebcastTitle = 'North American Crude Oil Independence: Not Just a Pipe Dream') > 0) t1
ON t1.Email = registrants.Email
WHERE registrants.Client = 'Salient'
ORDER BY registrants.Email

最佳答案

如果您想选择参加过 1 次以上网络广播的所有注册者以及他们参加的其中一场网络广播的信息(并且您不关心是哪一场),那么你可以使用mysql's extended group by functionality ,它允许您选择不在 group by 子句中的列。

SELECT *
FROM registrants
INNER JOIN webcasts ON registrants.WebcastTitle = webcasts.WebcastTitle
WHERE registrants.Client = 'Company' AND registrants.FirstName != ''
GROUP BY registrants.Email
HAVING COUNT(*) > 1
AND SUM(webcasts.WebcastTitle = 'The Learning Company') > 0
ORDER BY registrants.Email;

如果您想要所有注册者事件对,其中注册者至少参加了 1 场名为“学习公司”或“公司”的事件,并且总共至少参加了 2 场事件。由于您要加入 registrants.WebcastTitle,我假设 registrants 中的电子邮件不是唯一的。

SELECT *
FROM registrants
INNER JOIN webcasts ON registrants.WebcastTitle = webcasts.WebcastTitle
INNER JOIN (SELECT registrants.Email
FROM registrants
WHERE registrants.FirstName != ''
GROUP BY registrants.Email
HAVING COUNT(*) > 1
AND SUM(registrants.Client = 'Company' AND
registrants.WebcastTitle = 'The Learning Company') > 0) t1
ON t1.Email = registrants.Email

关于php - MySQL - 如何选择主键多次出现并且至少有一个其他字段匹配的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25016680/

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