간단하게 생각하자면
case -> {
when -> if
else -> else
end -> }
select * from (
select AA.a, b, c from (
select
case // {
when b = 'aaaaa' then 'a' //if( b = 'aaaaa') return a
when b = 'bbbbb' then 'b' //if( b = 'bbbbb') return b
else 'c' //else
END as b, //}
d
from temp where (d, b) IN (SELECT DISTINCT MAX(b) over (partition by c) as c, b
FROM temp)
) AA left outer join temp1 BB on AA.d = BB.d
) a where e = 'b'
group by와 비슷하게 그룹을 지어줄수있으나,
만약 MAX를 사용했을때 Select안에 있는 값들을 다 group by로 넣어줘야하는 반면
partition by 는 해당하는 하나로 그룹을 지어서 Count나 Max를 사용하게 만들어준다
SELECT DISTINCT MAX(b) over (partition by c) as c, b
FROM temp