我在 MySQL 查询上有一点问题,目前在网站上找不到答案(也许我错过了?)
问题是在子查询中检索根父级的值。
很快,该项目就是一个广告经理。我想找到一个月中花费的钱,对于一个广告系列,它可以包含多个广告,每个广告可以有不同的价格。所以,结果是按 Campaign 分组的,但是花费的钱必须先按 Ad 分组,然后才能按 Campaign 分组;我需要获取一些其他信息,这就是我进行子查询的原因。
实际查询是:
SELECT
COUNT(l.lgs_mkt_user_campaign_keyid) AS nbClics,
l.mkt_user_ad_keyid,
a.mkt_user_ad_ppc,
a.usr_user_keyid,
r.mkt_rel_user_campaign_ad_score,
c.mkt_user_campaign_ppm,
(
SELECT SUM(usr_user_money_spent) FROM (
SELECT
(a2.mkt_user_ad_ppc * COUNT(l2.lgs_mkt_user_campaign_keyid)) AS usr_user_money_spent
FROM
lgs_mkt_user_campaigns l2
LEFT JOIN
mkt_user_ads a2 ON a2.mkt_user_ad_keyid = l2.mkt_user_ad_keyid
WHERE
l2.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
GROUP BY
l2.mkt_user_ad_keyid
) AS Sub
) AS usr_user_money_spent
FROM
lgs_mkt_user_campaigns l
LEFT JOIN
mkt_user_ads a ON a.mkt_user_ad_keyid = l.mkt_user_ad_keyid
LEFT JOIN
mkt_rel_user_campaigns_ads r ON r.mkt_user_ad_keyid = l.mkt_user_ad_keyid
LEFT JOIN
mkt_user_campaigns c ON c.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
WHERE
l.lgs_mkt_user_campaign_datecrea BETWEEN '2012-11-01' AND '2012-11-30'
AND l.lgs_mkt_user_campaign_is_clic = 1
GROUP BY
c.mkt_user_campaign_keyid
问题出在第 17 行的 WHERE 子句中:l2.mkt_user_campaign_keyid = l.mkt_user_campaign_keyid
子查询无法处理别名“l”(我没有找到任何其他解决方案来实现这一点......)
我真的不想在这个 WHERE 子句中编写另一个子查询来检索相同的l.mkt_user_campaign_keyid
,我认为这将是一个坏主意,因为它会为此给出一个“只是”巨大的请求......
有谁知道如何实现这一目标?
非常感谢,1)对不起我的英语;),2)对不起,如果解决方案已经在stackoverflow上,我没有找到它:/
[编辑]
解释子查询的一些细节:
mkt_user_campaigns
: 包含所有活动,用户作为外键mkt_user_ads
: 包含所有广告,用户作为外键mkt_rel_user_campaigns_ads
:将广告与广告系列绑定lgs_mkt_user_campaigns
:记录广告的所有点击
主要查询检索有关活动的一些信息,我需要知道活动的成本。子查询尝试检索每个活动的成本。
具有更多详细信息的子查询:
它试图为一个活动查找所有被点击的广告、点击次数以及最终成本(ppc = 每次点击的价格)。在这里,WHERE 子句遗漏了一些细节,例如日志的 datecrea,但我将其简化为更具可读性。
此子查询必须返回与主查询相同的 Campaign 的结果,这就是这里的难点