Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Agregace je jazyková konstrukce, která kondenzuje kolekci do skaláru jako součást operace skupiny. Agregace Entity SQL mají dvě formy:
Funkce kolekce Entity SQL, které se dají použít kdekoli ve výrazu. To zahrnuje použití agregačních funkcí v projekcích a predikátech, které fungují na kolekcích. Funkce kolekce jsou upřednostňovaným režimem zadávání agregací v Entity SQL.
Seskupování agregací ve výrazech dotazu, které mají klauzuli GROUP BY. Stejně jako v transact-SQL se agregace skupin přijímají distinct a ALL jako modifikátory agregovaného vstupu.
Entity SQL se nejprve pokusí interpretovat výraz jako funkci kolekce a pokud je výraz v kontextu výrazu SELECT, interpretuje ho jako agregaci skupiny.
Entita SQL definuje speciální agregační operátor s názvem GROUPPARTITION. Tento operátor umožňuje získat odkaz na seskupenou vstupní sadu. To umožňuje pokročilejší seskupovací dotazy, kde lze výsledky klauzule GROUP BY použít na jiných místech než agregační funkce skupiny nebo funkce kolekce.
Funkce kolekce
Funkce kolekcí pracují s kolekcemi a vracejí skalární hodnotu. Pokud orders je například kolekce všech orders, můžete vypočítat nejstarší datum expedice pomocí následujícího výrazu:
min(select value o.ShipDate from LOB.Orders as o)
Agregace skupin
Agregace skupin se počítají přes výsledek skupiny podle definice klauzule GROUP BY. Klauzule GROUP BY rozděluje data do skupin. Pro každou skupinu ve výsledku se použije agregační funkce a samostatná agregace se vypočítá pomocí prvků v každé skupině jako vstupů agregovaného výpočtu. Pokud je klauzule GROUP BY použita ve výrazu SELECT, mohou být v projekci, HAVING nebo KLAUZULI ORDER BY přítomny pouze názvy výrazů seskupení, agregace nebo konstantní výrazy.
Následující příklad vypočítá průměrné množství objednané pro každý produkt.
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
Agregaci skupiny je možné mít bez explicitní klauzule GROUP BY ve výrazu SELECT. Všechny prvky budou považovány za jednu skupinu, která odpovídá případu určení seskupení na základě konstanty.
select avg(ol.Quantity) from LOB.OrderLines as ol
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
Výrazy použité v klauzuli GROUP BY se vyhodnocují pomocí stejného oboru překladu názvů, který by byl viditelný pro výraz klauzule WHERE.