别名 RANK() 函数在具有 DISTINCT 列的 where 子句中无法识别



我有 2 个带有列的表(客户、职位、产品、sales_cycle、call_count、cntry_cd、owner_cd、cr8),我面临着一些挑战,如下所述 请帮我解决这个问题

我的要求

我有 2 个表测试表1和测试表2

我需要通过使用"test.table1"进行选择来插入"test.table2"中的值。但是我遇到了一个问题,即在将数据加载到"test.table2"时,我遇到了一些重复项

我在两个表中总共有 8 列,但在加载时我需要获取列"call_count"的最高等级,条件是这些列的唯一值(客户、职位、产品、sales_cycle)

查询我尝试过的内容

select 
distinct (customer, position, product ,sales_cycle), 
rank () over (order by call_count desc) rnk, 
cntry_cd, 
owner_cd, 
cr8 
from test.table1 
where rnk=1

我在上面的查询中遇到了一些挑战(我使用的数据库是 RedShift)

1.我不能只对几列做区分

2.别名"rnk"在 where 子句中不被识别

请帮我解决这个问题,谢谢

不能在引入列别名的同一级别使用列别名。您需要将查询包装在派生表中。如果您使用rank(),如图所示的distinct也毫无用处

select customer, position, product, sales_cycle, 
cntry_cd, owner_cd, cr8 
from (
select customer, position, product, sales_cycle, 
cntry_cd, owner_cd, cr8,
rank () over (order by call_count desc) rnk
from test.table1 
) t 
where rnk=1;

派生表不会增加处理时间的开销。在这种情况下,它只是语法糖允许您引用列别名。

最新更新