简体   繁体   English

重组查询而没有子查询但可以联接吗?

[英]Restructure query without sub-query but join?

I am trying to rewrite the following query without using sub-query since I cannot afford hash 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 

Any suggestions? 有什么建议么? Thanks in Advance. 提前致谢。

Hard to tell exactly what your problem is... but here are some tricks removing the outer joins and using a CTE to reduce the search space.... may or may not work, would need to see more details about your model to be sure. 很难确切说明您的问题是什么...但是这里有一些技巧,可以删除外部联接并使用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