gpt4 book ai didi

MySQL Subselect 将两个表和聚合函数合并到单个查询中

转载 作者:行者123 更新时间:2023-11-29 21:11:55 28 4
gpt4 key购买 nike

我有 2 张 table

交易表

    +----+----------+-----+---------+----
| TID | CampaignID | DATE |
+----+----------+-----+---------+---+
| 1 | 5 | 2016-01-01 |
| 2 | 5 | 2016-01-01 |
| 3 | 2 | 2016-01-01 |
| 4 | 5 | 2016-01-01 |
| 5 | 1 | 2016-01-01 |
| 6 | 1 | 2016-02-02 |
| 7 | 3 | 2016-02-02 |
| 8 | 3 | 2016-02-02 |
| 9 | 5 | 2016-02-02 |
| 10| 4 | 2016-02-02 |
+----+----------+-----+---------+---+

事件表

    +-------------+----------------+--------------------
| CampaignID | DailyMaxImpressions | CampaignActive
+-------------+----------------+--------------------
| 1 | 5 | Y |
| 2 | 5 | Y |
| 3 | 5 | Y |
| 4 | 5 | Y |
| 5 | 1 | Y |
+-------------+----------------+--------------------

我想要做的是获取一个随机广告系列,其中交易表中的计数小于广告系列表中的每日最大印象数。我可能还传递交易表查询的日期部分

因此,对于 CampaignId 1,交易表中必须有 4 笔交易,并且 Campaignactive 必须为“Y”

如果这可以在一条语句中完成,任何帮助将不胜感激。 (mysql)

提前致谢,

杰夫·戈德斯坦

最佳答案

这应该可以帮到你。基本查询是选择每个事件的事件。 INNER 查询将预先聚合给定日期的每个营销事件。由此,LEFT-JOIN 允许返回任何事件,即使它不存在于子查询中或确实存在,但计数小于相关日期允许的计数。 RAND() 的顺序很明显。

SELECT
c.CampaignID
from
Campaign c
LEFT JOIN
( select
t1.CampaignID,
count(*) as CampCount
from
Transaction t1
where
t1.Date = YourDateParameterValue
group by
t1.CampaignID ) as T
ON c.CampaignID = T.CampaignID
where
c.CampaignActive = 'Y'
AND ( t.CampaignID IS NULL
OR t.CampCount < c.DailyMaxImpressions )
order by
RAND()

关于MySQL Subselect 将两个表和聚合函数合并到单个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293797/

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