0

我在 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 的结果,这就是这里的难点

4

0 回答 0