Aggregate 절(Visual Basic)Aggregate Clause (Visual Basic)

컬렉션에 하나 이상의 집계 함수를 적용 합니다.Applies one or more aggregate functions to a collection.

구문Syntax

Aggregate element [As type] In collection _  
  [, element2 [As type2] In collection2, [...]]  
  [ clause ]  
  Into expressionList  

요소Parts

용어Term 정의Definition
element 필수 요소.Required. 컬렉션의 요소를 반복 하는 데 사용 하는 변수입니다.Variable used to iterate through the elements of the collection.
type 선택 사항입니다.Optional. element의 형식입니다.The type of element. 형식이 지정 되지 않은, 경우 유형의 element 에서 유추 됩니다 collection합니다.If no type is specified, the type of element is inferred from collection.
collection 필수 요소.Required. 에 적용할 컬렉션을 의미 합니다.Refers to the collection to operate on.
clause 선택 사항입니다.Optional. 하나 이상의 절 등 쿼리는 Where aggregate 절 또는 절을 적용 하 여 쿼리 결과를 구체화할 절.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList 필수 요소.Required. 하나 이상의 쉼표로 구분 된 식 컬렉션에 적용할 집계 함수를 식별 하는입니다.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. 쿼리 결과에 멤버 이름을 지정 하는 집계 함수에 별칭을 적용할 수 있습니다.You can apply an alias to an aggregate function to specify a member name for the query result. 별칭 없음이 제공 하는 경우 집계 함수의 이름 사용 됩니다.If no alias is supplied, the name of the aggregate function is used. 예를 들어이 항목의 뒷부분에 나오는 집계 함수에 대 한 섹션을 참조 합니다.For examples, see the section about aggregate functions later in this topic.

설명Remarks

Aggregate 쿼리에서 집계 함수를 포함 하려면 절을 사용할 수 있습니다.The Aggregate clause can be used to include aggregate functions in your queries. 집계 함수는 값의 집합에 대해 검사 및 계산을 수행 하 고 단일 값을 반환 합니다.Aggregate functions perform checks and computations over a set of values and return a single value. 쿼리 결과 형식의 멤버를 사용 하 여 계산 된 값에 액세스할 수 있습니다.You can access the computed value by using a member of the query result type. 사용할 수 있는 표준 집계 함수를 All, Any, Average, Count, LongCount, Max, Min, 및 Sum 함수입니다.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. 이러한 함수는 sql에서 집계에 익숙한 개발자에 게 친숙 합니다.These functions are familiar to developers who are familiar with aggregates in SQL. 이 항목의 다음 섹션에 설명 되어 있습니다.They are described in the following section of this topic.

집계 함수의 결과 쿼리 결과 형식의 필드와 쿼리 결과에 포함 됩니다.The result of an aggregate function is included in the query result as a field of the query result type. 집계 값을 포함 하는 쿼리 결과 형식의 멤버의 이름을 지정 하는 집계 함수 결과 대 한 별칭을 제공할 수 있습니다.You can supply an alias for the aggregate function result to specify the name of the member of the query result type that will hold the aggregate value. 별칭 없음이 제공 하는 경우 집계 함수의 이름 사용 됩니다.If no alias is supplied, the name of the aggregate function is used.

Aggregate 절에 쿼리를 시작할 수 또는 추가 쿼리 절과 포함할 수 있습니다.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. 경우는 Aggregate 절에 쿼리 시작 되는 결과에 지정 된 집계 함수의 결과인 단일 값을 Into 절.If the Aggregate clause begins a query, the result is a single value that is the result of the aggregate function specified in the Into clause. 둘 이상의 집계 함수에 지정 된 경우는 Into 절 쿼리 결과의 각 집계 함수를 참조 하는 별도 속성을 사용 하 여 단일 형식을 반환 합니다.는 Into 절.If more than one aggregate function is specified in the Into clause, the query returns a single type with a separate property to reference the result of each aggregate function in the Into clause. 경우는 Aggregate 절 추가 쿼리 절과 포함 되는지, 쿼리 컬렉션에서 반환 되는 형식 결과의 각 집계 함수를 참조 하려면 별도 속성은는 Into 절.If the Aggregate clause is included as an additional clause in a query, the type returned in the query collection will have a separate property to reference the result of each aggregate function in the Into clause.

집계 함수Aggregate Functions

다음은 사용할 수 있는 표준 집계 함수는 Aggregate 절.The following are the standard aggregate functions that can be used with the Aggregate clause.

모두All

반환 true 컬렉션의 모든 요소가 지정 된 조건을 충족 하는 경우 그렇지 false합니다.Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. 예를 들면 다음과 같습니다.The following is an example:

Dim customerList1 = Aggregate order In orders
                    Into AllOrdersOver100 = All(order.Total >= 100)

임의의 값Any

반환 true 컬렉션의 임의 요소가 지정 된 조건을 충족 하는 경우 그렇지 false합니다.Returns true if any element in the collection satisfies a specified condition; otherwise returns false. 예를 들면 다음과 같습니다.The following is an example:

Dim customerList2 = From cust In customers
                    Aggregate order In cust.Orders
                    Into AnyOrderOver500 = Any(order.Total >= 500)

평균Average

컬렉션에 있는 모든 요소의 평균을 계산 하거나 컬렉션의 모든 요소에 대해 제공된 된 식을 계산 합니다.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. 예를 들면 다음과 같습니다.The following is an example:

Dim customerOrderAverage = Aggregate order In orders
                           Into Average(order.Total)

개수Count

컬렉션의 요소 수를 셉니다.Counts the number of elements in the collection. 선택적인 제공할 수 있습니다 Boolean 만 조건을 만족 하는 컬렉션의 요소 수를 계산 하는 식입니다.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. 예를 들면 다음과 같습니다.The following is an example:

Dim customerOrderAfter1996 = From cust In customers
                             Aggregate order In cust.Orders
                             Into Count(order.OrderDate > #12/31/1996#)

그룹화Group

참조의 결과로 그룹화 된 쿼리 결과 Group By 또는 Group Join 절.Refers to query results that are grouped as a result of a Group By or Group Join clause. 합니다 Group 함수에만 유효 합니다 Into 절을 Group By 또는 Group Join 절.The Group function is valid only in the Into clause of a Group By or Group Join clause. 자세한 내용 및 예제를 참조 하세요 그룹 By 절 하 고 Group Join 절합니다.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

컬렉션의 요소 수를 셉니다.Counts the number of elements in the collection. 선택적인 제공할 수 있습니다 Boolean 만 조건을 만족 하는 컬렉션의 요소 수를 계산 하는 식입니다.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. 결과 Long합니다.Returns the result as a Long. 예를 들어 참조는 Count 집계 함수입니다.For an example, see the Count aggregate function.

최대Max

컬렉션에서 최대값을 계산 하거나 컬렉션의 모든 요소에 대해 제공된 된 식을 계산 합니다.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. 예를 들면 다음과 같습니다.The following is an example:

Dim customerMaxOrder = Aggregate order In orders
                       Into MaxOrder = Max(order.Total)

최소Min

컬렉션의 최소값을 계산 하거나 컬렉션의 모든 요소에 대해 제공된 된 식을 계산 합니다.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. 예를 들면 다음과 같습니다.The following is an example:

Dim customerMinOrder = From cust In customers
                       Aggregate order In cust.Orders
                       Into MinOrder = Min(order.Total)

SumSum

컬렉션에 있는 모든 요소의 합계를 계산 하거나 컬렉션의 모든 요소에 대해 제공된 된 식을 계산 합니다.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. 예를 들면 다음과 같습니다.The following is an example:

Dim customerTotals = From cust In customers
                     Aggregate order In cust.Orders
                     Into Sum(order.Total)

예제Example

다음 예제에서는 사용 하는 방법을 보여 줍니다는 Aggregate 절에 집계 함수를 쿼리 결과에 적용 합니다.The following example shows how to use the Aggregate clause to apply aggregate functions to a query result.

Public Sub AggregateSample()
  Dim customers = GetCustomerList()

  Dim customerOrderTotal =
      From cust In customers
      Aggregate order In cust.Orders
      Into Sum(order.Total), MaxOrder = Max(order.Total),
      MinOrder = Min(order.Total), Avg = Average(order.Total)

  For Each customer In customerOrderTotal
    Console.WriteLine(customer.cust.CompanyName & vbCrLf &
                     vbTab & "Sum = " & customer.Sum & vbCrLf &
                     vbTab & "Min = " & customer.MinOrder & vbCrLf &
                     vbTab & "Max = " & customer.MaxOrder & vbCrLf &
                     vbTab & "Avg = " & customer.Avg.ToString("#.##"))
  Next
End Sub

사용자 정의 집계 함수 만들기Creating User-Defined Aggregate Functions

에 대 한 확장 메서드를 추가 하 여 쿼리 식에서 사용자 고유의 사용자 지정 집계 함수를 포함할 수 있습니다는 IEnumerable<T> 형식입니다.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. 사용자 지정 메서드가 계산 또는 집계 함수 참조는 열거 가능한 컬렉션에 대 한 작업을 수행할 수 있습니다.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. 확장 메서드에 대한 자세한 내용은 확장 메서드를 참조하세요.For more information about extension methods, see Extension Methods.

예를 들어, 다음 예제에서는 숫자 컬렉션의 중앙값을 계산 하는 사용자 지정 집계 함수를 보여 줍니다.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. 두 가지 오버 로드의는 Median 확장 메서드.There are two overloads of the Median extension method. 첫 번째 오버 로드를 입력으로 받아들입니다, 형식의 컬렉션인 IEnumerable(Of Double)합니다.The first overload accepts, as input, a collection of type IEnumerable(Of Double). 경우는 Median 유형 쿼리 필드에 대 한 집계 함수가 호출 될 Double,이 메서드가 호출 됩니다.If the Median aggregate function is called for a query field of type Double, this method will be called. 두 번째 오버 로드는 Median 메서드는 제네릭 형식 전달 될 수 있습니다.The second overload of the Median method can be passed any generic type. 제네릭 오버 로드를 Median 메서드를 참조 하는 두 번째 매개 변수를 사용 합니다 Func(Of T, Double) 람다 식 (컬렉션)에서 형식에 대 한 값 형식의 해당 값으로 프로젝션 할 Double.The generic overload of the Median method takes a second parameter that references the Func(Of T, Double) lambda expression to project a value for a type (from a collection) as the corresponding value of type Double. 다음의 다른 오버 로드에 중간 값 계산에 위임 된 Median 메서드.It then delegates the calculation of the median value to the other overload of the Median method. 람다 식에 대한 자세한 내용은 람다 식을 참조하세요.For more information about lambda expressions, see Lambda Expressions.

Imports System.Runtime.CompilerServices

Module UserDefinedAggregates

    ' Calculate the median value for a collection of type Double.
    <Extension()>
    Function Median(ByVal values As IEnumerable(Of Double)) As Double
        If values.Count = 0 Then
            Throw New InvalidOperationException("Cannot compute median for an empty set.")
        End If

        Dim sortedList = From number In values
                         Order By number

        Dim medianValue As Double

        Dim itemIndex = CInt(Int(sortedList.Count / 2))

        If sortedList.Count Mod 2 = 0 Then
            ' Even number of items in list.
            medianValue = ((sortedList(itemIndex) + sortedList(itemIndex - 1)) / 2)
        Else
            ' Odd number of items in list.
            medianValue = sortedList(itemIndex)
        End If

        Return medianValue
    End Function

    ' "Cast" the collection of generic items as type Double and call the 
    ' Median() method to calculate the median value.
    <Extension()>
    Function Median(Of T)(ByVal values As IEnumerable(Of T),
                          ByVal selector As Func(Of T, Double)) As Double
        Return (From element In values Select selector(element)).Median()
    End Function

End Module

다음 예제에서는 호출 하는 샘플 쿼리를 Median 형식의 컬렉션에 대 한 함수 집계 Integer, 및 형식의 컬렉션인 Double.The following example shows sample queries that call the Median aggregate function on a collection of type Integer, and a collection of type Double. 호출 하는 쿼리를 Median 형식의 컬렉션에 대 한 함수 집계 Double 의 오버 로드를 호출 합니다 Median 형식의 컬렉션을 입력으로 허용 되는 방법 Double합니다.The query that calls the Median aggregate function on the collection of type Double calls the overload of the Median method that accepts, as input, a collection of type Double. 호출 하는 쿼리를 Median 형식의 컬렉션에 대 한 함수 집계 Integer 의 제네릭 오버 로드를 호출 합니다 Median 메서드.The query that calls the Median aggregate function on the collection of type Integer calls the generic overload of the Median method.

Module Module1

    Sub Main()
        Dim numbers1 = {1, 2, 3, 4, 5}

        Dim query1 = Aggregate num In numbers1 Into Median(num)

        Console.WriteLine("Median = " & query1)

        Dim numbers2 = {1.9, 2, 8, 4, 5.7, 6, 7.2, 0}

        Dim query2 = Aggregate num In numbers2 Into Median()

        Console.WriteLine("Median = " & query2)
    End Sub

End Module

참고자료See also