在同一个SELECT

时间:2018-01-09 14:51:38

标签: mysql

我正在处理一些MySQL查询。我希望有可能在同一个语句中使用语句的AS名称。除了向你展示一个例子之外,我不知道如何描述它。

SELECT facebook.Spend,
    validclick.Revenue,
    yahoo.Spend,
    (yahoo.Spend + facebook.spend) AS TSpend,
    (validclick.Revenue - TSpend) AS Profit
FROM validclick
JOIN yahoo ON yahoo.Campaign = validclick.Campaign
JOIN facebook ON facebook.Campaign = validclick.Campaign

我希望能够在其他语句中使用TSpend作为名称。我正在使用一些案例陈述和长方程式,并且能够使用这些更容易的名称会使事情变得更容易。当我尝试使用MySQL时,说这是一个错误,但是你们知道一切,所以如果有办法,你就会知道!

以下是实际查询:

            SELECT validclick.Website AS Website, 
                (yahoo.Spend + facebook.Spend) AS TSpend, 
                (validclick.Revenue - TSpend) AS Profit, 
                (TSpend / Profit) AS ROI, 
            FROM 
                (SELECT camp.CampaignName AS CampaignName, 
                    MAX(camp.Website) AS Website, 
                    SUM(vc.Revenue) AS Revenue 
                FROM 
                    (SELECT AffID, 
                        MAX(CampaignName) AS CampaignName, 
                        Website
                    FROM campaigns 
                    $campaignmanagersql .
                    GROUP BY AffID) AS camp 
                JOIN 
                    (SELECT AffID, 
                        SUM(Clicks) AS Clicks, 
                        SUM(AffiliateRevenue) AS Revenue, 
                    FROM validclickvc 
                    WHERE Date BETWEEN '2018-01-07' AND '2018-01-08' 
                    GROUP BY AffID) AS vc 
                ON vc.AffID = camp.AffID 
                GROUP BY camp.CampaignName) AS validclick 
            LEFT JOIN 
                (SELECT CampaignName, 
                    SUM(Spend) AS Spend,
                    SUM(OutboundClicks) AS PaidClicks 
                FROM facebookads 
                WHERE Date BETWEEN '2018-01-07' AND '2018-01-08' 
                GROUP BY CampaignName) AS facebook 
            ON validclick.CampaignName = facebook.CampaignName 
            LEFT JOIN 
                (SELECT CampaignName, 
                    SUM(Spend) AS Spend,
                    SUM(Clicks) AS PaidClicks 
                FROM yahoogemini 
                WHERE Date BETWEEN '2018-01-07' AND '2018-01-08' 
                GROUP BY CampaignName) AS yahoo 
            ON validclick.CampaignName = yahoo.CampaignName 
            ORDER BY CampaignName

2 个答案:

答案 0 :(得分:1)

对于使用LEFT JOIN的别名,您应该参考此回复:https://stackoverflow.com/a/42848658/4505007

答案 1 :(得分:1)

在MySQL中,您只能在AS ColumnGROUP BY条款中使用HAVING

您可以将查询包装到另一个SELECT

SELECT * FROM 
    (
    SELECT facebook.Spend,
        validclick.Revenue,
        yahoo.Spend,
        (yahoo.Spend + facebook.spend) AS TSpend,
        (validclick.Revenue - TSpend) AS Profit
    FROM validclick
    JOIN yahoo ON yahoo.Campaign = validclick.Campaign
    JOIN facebook ON facebook.Campaign = validclick.Campaign
    ) AS t1
WHERE TSpend > 10

然而,这会对性能产生影响,因为这些计算列的搜索不会涉及索引