Skip to content

SUM

The Sum aggregate function allows you to calculate the mathematical sum for a set of objects. To use the function, include Sum(columnNameInDatabase) into the list of properties requested from the server. For example, the following query retrieves the sum for all box office earnings for all movies in the database:

DataQueryBuilder dataQueryBuilder = DataQueryBuilder.create().setProperties( "Sum(totalBoxOffice)");
Backendless.Data.of( "Movie" ).find( dataQueryBuilder, new AsyncCallback<List<Map>>()
{
  @Override
  public void handleResponse( List<Map> response )
  {
    // print out the first object from the collection
    Log.i( "MYAPP", response.get( 0 ) );
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", fault.toString() ); 
  }
});
The query returns the following result, notice the sum property in the returned object. The value of the property is the mathematical  sum of all values in the totalBoxOffice column:

basicSum

Using Alias

To change the name of the returned property from sum to a custom name, use the following syntax:

Sum( columnNameInDatabase ) as customPropertyName

For example, the following query returns the sum value in the grandTotal property:

DataQueryBuilder dataQueryBuilder = DataQueryBuilder.create();
dataQueryBuilder.setProperties( "Sum(totalBoxOffice) as grandTotal" );
Backendless.Data.of( "Movie" ).find( dataQueryBuilder, new AsyncCallback<List<Map>>()
{
  @Override
  public void handleResponse( List<Map> response )
  {
    // print out the first object from the collection
    Log.i( "MYAPP", response.get( 0 ) );
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", fault.toString() ); 
  }
});
The response for the query now contains the grandTotal property:

basicSumWithAlias

Grouping Results

Results in the response can be grouped by values from another column. To request grouping of the results, add the groupBy parameter to the request with the value containing the name of the column. For example, the following request returns the sum of earnings value for the movies in the database grouped by the year the movies were released:

DataQueryBuilder dataQueryBuilder = DataQueryBuilder.create();
dataQueryBuilder.setProperties( "Sum(totalBoxOffice)", "yearReleased" );
dataQueryBuilder.setGroupBy( "yearReleased" );
Backendless.Data.of( "Movie" ).find( dataQueryBuilder, new AsyncCallback<List<Map>>()
{
  @Override
  public void handleResponse( List<Map> response )
  {
    Log.i( "MYAPP", response );
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", fault.toString() ); 
  }
});
The response for this request contains sums of earnings for the movies grouped by the release year:

sumWithGroupBy

Sorting

The results can be sorted using the sortBy parameter. For example, results for the following request will be sorted by the values in the yearReleased column in the descending order:

DataQueryBuilder dataQueryBuilder = DataQueryBuilder.create();
dataQueryBuilder.setProperties( "Sum(totalBoxOffice)", "yearReleased" );
dataQueryBuilder.setGroupBy( "yearReleased" );
dataQueryBuilder.setSortBy( "yearReleased DESC" );
Backendless.Data.of( "Movie" ).find( dataQueryBuilder, new AsyncCallback<List<Map>>()
{
  @Override
  public void handleResponse( List<Map> response )
  {
    Log.i( "MYAPP", response );
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", fault.toString() ); 
  }
});
To sort results by the aggregated value, assign a custom name to the column and sort by that name:
DataQueryBuilder dataQueryBuilder = DataQueryBuilder.create();
dataQueryBuilder.setProperties( "Sum(totalBoxOffice) as grandTotal", "yearReleased" );
dataQueryBuilder.setGroupBy( "yearReleased" );
dataQueryBuilder.setSortBy( "grandTotal" );
Backendless.Data.of( "Movie" ).find( dataQueryBuilder, new AsyncCallback<List<Map>>()
{
  @Override
  public void handleResponse( List<Map> response )
  {
    Log.i( "MYAPP", response );
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", fault.toString() ); 
  }
});