Ваш запрос в основном эквивалентен:
select pt.*,
dense_rank() over (partition by type order by total_sales desc) as rnk
from (select product, type, sum(sales) as total_sales
from mytable
where date > dateadd(month, -3, getdate())
group by product, type
) pt;
То есть dense_rank()
выполняется после GROUP BY
.
Это полностью разрешено , Итак, ваше понимание того, что их нельзя использовать вместе, неверно. Тем не менее, есть ограничения. Ссылки в dense_rank()
должны быть столбцами или выражениями, которые известны после GROUP BY
.
Итак, это разрешено в вашей версии:
dense_rank() over (partition by type order by sum(sales) desc) as rnk
но это не так:
dense_rank() over (partition by type order by sales desc) as rnk
, поскольку sales
(само по себе) недействительно после group by
.