I am trying to count distinct values per account id using row_number()
This is an example of data that I have:
ID | val
_____________
1  | a
1  | a
1  | b
2  | a
3  | c
3  | a
3  | b
4  | d
4  | d
5  | a
I want to basically count unique values per unique ID. I have tried to use row_number() partition over.
This is an example of the output I want:
ID | val | rank | count
_____________
1  | a  | 1  | 2
1  | b  | 2  | 3
2  | a  | 1  | 1
3  | c  | 1  | 1
3  | a  | 2  | 1
3  | b  | 3  | 3
4  | d  | 1  | 2
4  | e  | 2  | 2
5  | a  | 1  | 1
I've tried this:
%sql
-- Show 
select * from (
select `ID`,`val`, dense_rank() over (partition by `ID` order by `val` asc) as row_num
from table1
)
order by `ID` asc
Which resets the counts based off of new ID, but doesn't count distinct val's. AKA gives me this:
ID | val | rank
_____________
1  | a  | 1
1  | a  | 2
1  | b  | 3
2  | a  | 1
3  | c  | 1
3  | a  | 2
3  | b  | 3
3  | b  | 4
3  | b  | 5
4  | d  | 1
4  | d  | 2
4  | e  | 3
4  | e  | 4
5  | a  | 1
 
    