簡體   English   中英

重組查詢而沒有子查詢但可以聯接嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM