繁体   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