【发布时间】:2020-02-03 16:05:44
【问题描述】:
我有以下疑问:
WITH MY_CTE as
(
select
....
.....
)
SELECT
MY_CTE.*
,tt.currency as most_used_currency
from MY_CTE
cross join
(select t.currency
from My_CTE t
group by t.currency
order by count(*) desc
limit 1
) tt
where MY_CTE.currency = 'EUR'
但是交叉连接忽略了我的 where 子句。 请问如何强制它在处理交叉连接之前处理 where 子句?
返回的样本数据:
这显然是错误的,因为我说不包括货币 SEK,但它却说它是最受欢迎的货币。 我不能将 where 子句放在交叉连接中,因为我将在 tableau 中使用它并且需要用户能够过滤某些条件,例如货币。
如果 MY_CTE 被过滤为仅显示欧元货币,则最受欢迎的货币应该是欧元
【问题讨论】:
-
也许问题是 SQL 中的比较是由单 = 执行的,而不是双 == 还要注意您正在查看的列:MY_CTE.currency 或 tt.currency。 tt.currency 值不会受到您的过滤器的影响。
-
有什么方法可以过滤交叉连接吗?
-
交叉连接是唯一不需要任何条件的连接。没有加入过滤器之类的东西。当您使用 join 时,您可以设置连接条件
on .....。过滤器是您在 SQL 的WHERE ...部分中定义的内容。如果您能提供数据样本和预期结果,也许会更容易理解。 -
编辑显示我得到的结果
标签: amazon-redshift cross-join