In this article I am going to explain how to use aggregate functions in LINQ to SQL as well as in SQL Server.
Aggregate Function
An aggregate function is a function where the values of multiple rows are grouped together as input on certain criteria to form a single value of greater significance or measurement such as a set. Aggregate functions return a single value.
Common Aggregate Functions are:
- SUM() : Returns the sum of column values.
 
- AVERAGE() : Returns the average of column values.
 
- COUNT() : Returns the total number of rows in a table.
 
- MAX() : Returns the maximum value in the column.
 
- MIN() : Returns the minimum value in the column.
 
Create DataContext Class
I create a data context class to perform aggregate function operations. So first drag and drop the EMPLOYEE table to the data context class.
![Aggregate-Functions1.jpg]()
Operation Performing Data
Here I show all the data in the EMPLOYEE table; using:
SELECT * FROM EMPLOYEE
![Aggregate-Functions2.jpg]()
Use GridView Control
Here I am using a GridView control to show employee data:
<asp:GridView ID="grdEmployee" runat="server"></asp:GridView>
SUM() Function
This SUM() function returns a single value that is the result of adding all row's values for a single column or can specify a certain criteria. The SQL SUM() function takes an argument specifying which column to add all values of every row for, or some criteria for a column. In the following code I am showing the sum of salaries for an individual employee and all employees.
1. In SQL Server
SELECT SUM(SALARY) AS [TOTAL SALARY] FROM EMPLOYEE
![Aggregate-Functions3.jpg]()
SELECT Name,SUM(SALARY) AS [SALARY] FROM EMPLOYEE GROUP BY Name
![Aggregate-Functions4.jpg]()
2. In LINQ To SQL
private void SumGroupSalary()
{
  EmployeeOperationDataContext employee = new EmployeeOperationDataContext();
 
     /* Addition of salary by employee */
    var salaryEmpSum = from emp in employee.EMPLOYEEs
                           group emp by emp.Name into empg
                           select new
                           {
                               Name = empg.Key,
                               Salary = empg.Sum(x => x.SALARY)
                           };
 
        grdEmployee.DataSource = salaryEmpSum;
        grdEmployee.DataBind();
 
        /*Total Salaries for all employee */
        var salarySum = (from emp in employee.EMPLOYEEs
                         select emp.SALARY).Sum();
 
        Response.Write(string.Format("Addition of Salary is : {0} ", salarySum));
    }
![Aggregate-Functions5.jpg]()
AVERAGE() Function
This AVERAGE() function returns a single value that is the average of all row's values for a single column or can specify a criteria for a single column. The SQL AVG() function takes an argument specifying which column to average all values of every row for, or some criteria for a column. In the following code I am showing the average of salaries for an individual employee and all employees.
1. In SQL Server
SELECT AVG(SALARY) AS SALARY FROM EMPLOYEE
![Aggregate-Functions6.jpg]()
SELECT AVG(SALARY) AS SALARY FROM EMPLOYEE GROUP BY Name
![Aggregate-Functions7.jpg]()
2. In LINQ To SQL
private void AverageSalary()
{
  EmployeeOperationDataContext employee = new EmployeeOperationDataContext();
 
        /*Averge salary from multiple salries for employee */
        var salaryGroupAvg = from emp in employee.EMPLOYEEs
                             group emp by emp.Name into empg
                             select new
                             {
                                 Name = empg.Key,
                                 Salary = empg.Average(x => x.SALARY)
                             };
 
        grdEmployee.DataSource = salaryGroupAvg;
        grdEmployee.DataBind();
 
        /*Averge of whole salary in Employee table*/
        var salaryAvg = (from emp in employee.EMPLOYEEs
                         select emp.SALARY).Average();
 
Response.Write(string.Format("Average of Salary is : {0} ", salaryAvg));
    }
![Aggregate-Functions8.jpg]()
COUNT() Function
The COUNT() function returns a single value that is the count of all rows for a single column or can specify a criteria for a single column. The SQL COUNT() function takes an argument that represents which column will be used to count the total rows for or some criteria for a column. In the following code I am showing the total number employees with the same employee name and the total number of employees.
1. In SQL Server
SELECT COUNT(Id) AS [Total Number] FROM EMPLOYEE
![Aggregate-Functions9.jpg]()
 
SELECT Name, COUNT(Id) AS [Total Number] FROM EMPLOYEE GROUP BY Name
![Aggregate-Functions10.jpg]()
2. In LINQ To SQL
 
private void TotalNumberOfEmployee()
{
  EmployeeOperationDataContext employee = new EmployeeOperationDataContext();
 
        var totalEmployee = from emp in employee.EMPLOYEEs
                            group emp by emp.Name into empg
                            select new
                            {
                                Name = empg.Key,
                                TotalEmployee = empg.Count()
                            };
 
        grdEmployee.DataSource = totalEmployee;
        grdEmployee.DataBind();
                            
        var employeeCount = (from emp in employee.EMPLOYEEs
                         select emp.Id).Count();
 
        Response.Write(string.Format("Total number of Employee is : {0} ", employeeCount)); 
    }
![Aggregate-Functions11.jpg]()
MAX() Function
This MAX() function returns a single value that is the maximum of all rows for a single column or can specify a criteria for a single column. The SQL MAX() function takes an argument specifying a column to get the maximum value from, or some criteria for a column. In the following code I am showing the maximum salary for an individual employee and all employees.
1. In SQL Server
SELECT MAX(SALARY) AS SALARY FROM EMPLOYEE
![Aggregate-Functions12.jpg]()
SELECT Name, MAX(SALARY) AS SALARY FROM EMPLOYEE GROUP BY Name
![Aggregate-Functions13.jpg]()
2. In LINQ To SQL
 
private void MaxSalary()  
{
  EmployeeOperationDataContext employee = new EmployeeOperationDataContext();
 
        var salaryMaximum = from emp in employee.EMPLOYEEs
                            group emp by emp.Name into empg
                            select new
                            {
                                Name = empg.Key,
                                MaximumSalary = empg.Max(x => x.SALARY)
                            };
 
        grdEmployee.DataSource = salaryMaximum;
        grdEmployee.DataBind();
 
        var salaryMax = (from emp in employee.EMPLOYEEs
                         select emp.SALARY).Max();
 
        Response.Write(string.Format("Maximun Salary is : {0} ", salaryMax));       
 
    }
![Aggregate-Functions14.jpg]()
MIN() Function
This MIN() function returns a single value that is the minimum in all rows for a single column or can be from a specified criteria for a single column. The SQL MIN() function takes a argument that specifies a column to get the minimum value for from all rows or can be a specified criteria. In the following code I am showing the minimum salary for an individual employee and all employees.
1. In SQL Server
SELECT MIN(SALARY) AS SALARY FROM EMPLOYEE
![Aggregate-Functions15.jpg]()
SELECT Name, MIN(SALARY) AS SALARY FROM EMPLOYEE GROUP BY Name
![Aggregate-Functions16.jpg]()
2. In LINQ To SQL
 
private void MinSalary()
 {
  EmployeeOperationDataContext employee = new EmployeeOperationDataContext();
 
        /*Minimum salary per employee name */
        var salaryMinimum = from emp in employee.EMPLOYEEs
                            group emp by emp.Name into empg
                            select new
                            {
                                Name = empg.Key,
                                MinimumSalary = empg.Min(x => x.SALARY)
                            };
 
        grdEmployee.DataSource = salaryMinimum;
        grdEmployee.DataBind();
 
        /*Minimum salary in all employees */
        var salaryMin = (from emp in employee.EMPLOYEEs
                         select emp.SALARY).Min();
 
        Response.Write(string.Format("Minimun Salary is : {0} ", salaryMin));       
 
    } 
![Aggregate-Functions17.jpg]()