替代GROUP BY列中的引用到相关子查询的结果

时间:2013-12-29 01:26:09

标签: sql postgresql correlated-subquery amazon-redshift paraccel

这个问题是由于基于Paraccel的柱状分析数据库Amazon Redshift的限制。其中一项不受支持的功能是references in a GROUP BY column to the results of a correlated subquery

例如,以下语句将生成Redshift错误,因为GROUP BY使用由子查询生成的list

select listing.listid,
(select count (sales.listid) from sales where sales.listid=listing.listid) as list
from listing
group by list, listing.listid; 

Gordon Linoff中的以下示例是另一个不受支持的用例(生成此一般问题的specific question的答案)。

select type, (case when cnt > XXX then url end) as url, sum(cnt) as visit_cnt
from (select type, url, count(*) as cnt
      from t
      group by type, url
     ) t
group by type, url
order by type, sum(cnt) desc;

此问题的目的是找到克服此特定Amazon Redshift相关子查询限制的通用模式。有哪些替代SQL模式可以实现与使用相关子查询中的值相同的结果?

1 个答案:

答案 0 :(得分:0)

左边连接应该可以解决问题,除非我遗漏了什么。

SELECT listing.listid
      ,COUNT(sales.listid)
FROM      listing
LEFT JOIN sales
       ON sales.listid = listing.listid
GROUP BY listing.listid
ORDER BY COUNT(sales.listid) DESC
;