Sql 替代对相关子查询结果的GROUP BY列中的引用
这个问题源于Amazon Redshift(基于Paraccel的专栏分析数据库)的局限性。不受支持的功能之一是 例如,以下语句将生成红移错误,因为GROUPBY使用子查询生成的Sql 替代对相关子查询结果的GROUP BY列中的引用,sql,postgresql,correlated-subquery,amazon-redshift,paraccel,Sql,Postgresql,Correlated Subquery,Amazon Redshift,Paraccel,这个问题源于Amazon Redshift(基于Paraccel的专栏分析数据库)的局限性。不受支持的功能之一是 例如,以下语句将生成红移错误,因为GROUPBY使用子查询生成的list select listing.listid, (select count (sales.listid) from sales where sales.listid=listing.listid) as list from listing group by list, listing.listid; 下面的示
list
select listing.listid,
(select count (sales.listid) from sales where sales.listid=listing.listid) as list
from listing
group by list, listing.listid;
下面的示例来自另一个不受支持的用例(对生成此一般问题的答案)
这个问题的目的是找到一个通用模式来克服这个特定的Amazon红移相关子查询限制。与使用相关子查询中的值获得相同结果的替代SQL模式有哪些?除非我遗漏了什么,否则左连接应该可以做到这一点
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
;
对于不熟悉红移的人:假设您使用的是大约一个PostgreSQL 8.1/8.2功能集,外加一些额外的功能和额外的限制。没有CTE或窗口函数,没有
unnest
和array\u agg
等(顺便说一句,如果有红移SQLFIDLE就太好了)。您确实有窗口函数:+1@Guy:确实有窗口函数。不过,它们确实有局限性。
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
;