我正在处理一些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
答案 0 :(得分:1)
对于使用LEFT JOIN的别名,您应该参考此回复:https://stackoverflow.com/a/42848658/4505007
答案 1 :(得分:1)
在MySQL中,您只能在AS Column
和GROUP 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
然而,这会对性能产生影响,因为这些计算列的搜索不会涉及索引