MySQL:访问子子查询中的“root”值

时间:2012-11-02 09:16:52

标签: mysql group-by subquery parent

我对MySQL查询有一点问题,我暂时没有在网站上找到答案(也许我会想念它?)

问题是在子子查询中检索根父级的值。

很快,该项目是一名广告经理。我想找到一个广告系列在一个月内花费的金额,可以包含多个广告,每个广告可以有不同的价格。 因此,结果按广告系列进行分组,但所花费的资金必须按照广告进行分组才能按广告系列进行分组;我需要获得一些其他信息,这就是我制作子查询的原因。

实际查询是:

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子句会遗漏一些细节,比如日志的日期,但我把它变得更具可读性。

此子查询必须返回与主体查询相同的Campaign的结果,这就是这里的难度

0 个答案:

没有答案