我遇到了同样的问题,但我已经将它应用到DENSE_RANK()
下面MAX() over(partition by)
的代码中,希望如果有人仍然在这个问题上苦苦挣扎,它会有所帮助:
-- IN NZ
select
id,NAME,count(distinct name) OVER (
PARTITION BY id)
from
edw.admin.test;
/*
create table edw.admin.test
as
(
select 1 as id,'Anne' as name,500.0 as amt,'iv' as IID
union ALL
select 1,'Jeni',550.0,'is'
union ALL
select 1,'Arna',250.0,'is'
union ALL
select 2,'Raj',290.0,'is'
union ALL
select 1,'Anne',350.0,'ir'
union ALL
select 1,NULL,350.0,'ir'
union ALL
select 3,NULL,350.0,'ir'
union ALL
select 3,NULL,350.0,'ir');
Output in NZ:
-------------------------
ID NAME COUNT
1 NULL 3
1 Anne 3
1 Anne 3
1 Arna 3
1 Jeni 3
2 Raj 1
3 NULL 0
3 NULL 0
*/
-- IN AWS RS
select id, name, max(DENSE_COUNT) over(partition by id)
from(
select
id,name,CASE WHEN name IS NULL THEN 0 ELSE DENSE_RANK() OVER (
PARTITION BY id
order by name) END AS DENSE_COUNT
from
(
select 1 as id,'Anne' as name,500.0 as amt,'iv' as IID
union ALL
select 1,'Jeni',550.0,'is'
union ALL
select 1,'Arna',250.0,'is'
union ALL
select 2,'Raj',290.0,'is'
union ALL
select 1,'Anne',350.0,'ir'
union ALL
select 1,NULL,350.0,'ir'
union ALL
select 3,NULL,350.0,'ir'
union ALL
select 3,NULL,350.0,'ir'));
/*
Output in RS:
-------------------------
id name max
1 Anne 3
1 Anne 3
1 Arna 3
1 Jeni 3
1 NULL 3
2 Raj 1
3 NULL 0
3 NULL 0
*/