můžete použijte GROUP BY SalesOrderID
. Rozdíl je v tom, že s GROUP BY můžete mít pouze agregované hodnoty pro sloupce, které nejsou zahrnuty ve GROUP BY.
Naproti tomu pomocí agregačních funkcí v okně namísto GROUP BY můžete načíst agregované i neagregované hodnoty. To znamená, že ačkoli to ve svém vzorovém dotazu neděláte, můžete načíst oba jednotlivé OrderQty
hodnoty a jejich součty, počty, průměry atd. ve skupinách stejného SalesOrderID
s.
Zde je praktický příklad, proč jsou okenní agregáty skvělé. Předpokládejme, že potřebujete vypočítat, jaké procento z celkového počtu je každá hodnota. Bez agregací v okně byste museli nejprve odvodit seznam agregovaných hodnot a poté jej připojit zpět k původní sadě řádků, tj. takto:
SELECT
orig.[Partition],
orig.Value,
orig.Value * 100.0 / agg.TotalValue AS ValuePercent
FROM OriginalRowset orig
INNER JOIN (
SELECT
[Partition],
SUM(Value) AS TotalValue
FROM OriginalRowset
GROUP BY [Partition]
) agg ON orig.[Partition] = agg.[Partition]
Nyní se podívejte, jak můžete udělat totéž s agregací v okně:
SELECT
[Partition],
Value,
Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
FROM OriginalRowset orig
Mnohem jednodušší a čistší, že?