[英]Restructure query without sub-query but join?
我试图重写下面的查询而不使用子查询,因为我负担不起哈希联接。
SELECT
COUNT(wins.bid) as wins,
to_char((TIMESTAMP 'epoch' + bidRequestTime * INTERVAL '1 Second'), 'DD') as date,
COUNT(impression.bid) as impression,
lid,
COUNT(b.bid) as requests,
ROUND(SUM(spendCalc),2) as spend
FROM (
SELECT lid, bids.bid,bidRequestTime,price::float*COUNT(impression.bid)/1000::float/.80::float as spendCalc
FROM bids
LEFT OUTER JOIN wins on wins.bid = bids.bid
LEFT OUTER JOIN impressions impression ON impression.bid = bids.bid
WHERE bidRequestTime BETWEEN 1470614400 AND 1471219200
GROUP BY price, bids.bid, bidRequestTime, lid
) b
LEFT OUTER JOIN wins on wins.bid = b.bid
LEFT OUTER JOIN impressions impression ON impression.bid = b.bid
WHERE bidRequestTime BETWEEN 1470614400 AND 1471219200
GROUP BY lid, date
有什么建议么? 提前致谢。
很难确切说明您的问题是什么...但是这里有一些技巧,可以删除外部联接并使用CTE来减少搜索空间。...可能或可能不起作用,需要查看有关模型的更多详细信息当然。
WITH mybid as
(
SELECT bid, bidRequestTime
FROM bids
WHERE bidRequestTime BETWEEN 1470614400 AND 1471219200
)
SELECT
COUNT(wins_bid) as wins,
to_char((TIMESTAMP 'epoch' + bidRequestTime * INTERVAL '1 Second'), 'DD') as date,
COUNT(imp_bid) as impression,
lid,
COUNT(b.bid) as requests,
ROUND(SUM(spendCalc),2) as spend
FROM (
SELECT wins.bid as wins_bid, lid, bids.bid, bidRequestTime, impression.bid as imp_bid, price::float*COUNT(impression.bid)/1000::float/.80::float as spendCalc
FROM mybid as bids
LEFT OUTER JOIN wins on wins.bid = bids.bid
LEFT OUTER JOIN impressions impression ON impression.bid = bids.bid
GROUP BY price, bids.bid, bidRequestTime, lid
) b
GROUP BY lid, date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.