Udostępnij za pośrednictwem


Funkcje agregujące (Entity SQL)

Agregacja to konstrukcja języka, która kondensuje kolekcję do skalarnego w ramach operacji grupy. Agregacje Entity SQL są dostępne w dwóch formach:

  • Funkcje kolekcji Entity SQL, które mogą być używane w dowolnym miejscu w wyrażeniu. Obejmuje to używanie funkcji agregujących w projekcjach i predykatach, które działają na kolekcjach. Funkcje kolekcji są preferowanym trybem określania agregacji w jednostce SQL.

  • Grupuj agregacje w wyrażeniach zapytania, które mają klauzulę GROUP BY. Podobnie jak w języku Transact-SQL, agregacje grup akceptują wartości DISTINCT i ALL jako modyfikatory do zagregowanych danych wejściowych.

Jednostka SQL najpierw próbuje zinterpretować wyrażenie jako funkcję kolekcji i jeśli wyrażenie znajduje się w kontekście wyrażenia SELECT, interpretuje je jako agregację grup.

Jednostka SQL definiuje specjalny operator agregacji o nazwie GROUPPARTITION. Ten operator umożliwia uzyskanie odwołania do pogrupowanego zestawu danych wejściowych. Umożliwia to bardziej zaawansowane zapytania grupowania, w których wyniki klauzuli GROUP BY mogą być używane w miejscach innych niż funkcje agregacji grupy lub kolekcji.

Funkcje kolekcji

Funkcje kolekcji działają na kolekcjach i zwracają wartość skalarną. Jeśli na przykład orders jest kolekcją wszystkich orders, możesz obliczyć najwcześniejszą datę wysyłki przy użyciu następującego wyrażenia:

min(select value o.ShipDate from LOB.Orders as o)

Agregacje grup

Agregacje grup są obliczane na podstawie wyniku grupy zdefiniowanego przez klauzulę GROUP BY. Klauzula GROUP BY dzieli dane na grupy. Dla każdej grupy w wyniku jest stosowana funkcja agregacji, a oddzielna agregacja jest obliczana przy użyciu elementów w każdej grupie jako danych wejściowych do obliczenia agregowanego. Jeśli klauzula GROUP BY jest używana w wyrażeniu SELECT, w klauzuli projekcji, POSIADANIA lub ORDER BY mogą znajdować się tylko nazwy wyrażeń grupowania, agregacji lub stałych.

Poniższy przykład oblicza średnią ilość uporządkowaną dla każdego produktu.

select p, avg(ol.Quantity) from LOB.OrderLines as ol

group by ol.Product as p

Istnieje możliwość agregowania grupy bez jawnej klauzuli GROUP BY w wyrażeniu SELECT. Wszystkie elementy będą traktowane jako pojedyncza grupa, co odpowiada przypadku określania grupowania na podstawie stałej.

select avg(ol.Quantity) from LOB.OrderLines as ol

select avg(ol.Quantity) from LOB.OrderLines as ol group by 1

Wyrażenia używane w klauzuli GROUP BY są oceniane przy użyciu tego samego zakresu rozpoznawania nazw, który byłby widoczny dla wyrażenia klauzuli WHERE.

Zobacz także