# Aggregate on condition > Supported in: Batch, Faster Aggregate expressions based on a condition statement. **Transform categories**: Aggregate, Popular ## Declared arguments * **Condition for columns to aggregate on:** All columns in the input schema will be tested to see if they match this condition. If they match, the given expressions will be applied to them.
*ColumnPredicate* * **Dataset:** Dataset to apply operations to.
*Table* * **Expressions to aggregate:** The aggregate expression to apply once per each column that matches condition.
*List\>* * *optional* **Group by columns:** List of columns to group the dataset by when aggregating. If empty, no group by is applied.
*List\>* ## Examples ### Example 1: Edge case **Description:** Count non null rows for all columns. **Argument values:** * **Condition for columns to aggregate on:**
allColumns(

) * **Dataset:** ri.foundry.main.dataset.a * **Expressions to aggregate:** \[
dynamicAlias(
 expression:
rowCount(
 expression: `column`,
),
 transformer:
columnNameConcat(
 inputs: \[`column`, `_non_null`],
),
)] * **Group by columns:** *null* **Input:** | id | value | distance | | ----- | ----- | ----- | | 1 | 100 | 2000 | | 2 | *null* | 100 | | 3 | 500 | 300 | **Output:** | id\_non\_null | value\_non\_null | distance\_non\_null | | ----- | ----- | ----- | | 3 | 2 | 3 | *** ### Example 2: Edge case **Description:** Count non null and mean of integer columns. **Argument values:** * **Condition for columns to aggregate on:**
columnHasType(
 type: Integer,
) * **Dataset:** ri.foundry.main.dataset.a * **Expressions to aggregate:** \[
dynamicAlias(
 expression:
rowCount(
 expression: `column`,
),
 transformer:
columnNameConcat(
 inputs: \[`column`, `_non_null`],
),
),
dynamicAlias(
 expression:
mean(
 expression: `column`,
),
 transformer:
columnNameConcat(
 inputs: \[`column`, `_mean`],
),
)] * **Group by columns:** *null* **Input:** | id | value | distance | | ----- | ----- | ----- | | 1 | 100 | 2000 | | 2 | *null* | 100 | | 3 | 500 | 300 | **Output:** | id\_non\_null | id\_mean | value\_non\_null | value\_mean | | ----- | ----- | ----- | ----- | | 3 | 2.0 | 2 | 300.0 | *** ### Example 3: Edge case **Argument values:** * **Condition for columns to aggregate on:**
columnHasType(
 type: Integer,
) * **Dataset:** ri.foundry.main.dataset.a * **Expressions to aggregate:** \[
dynamicAlias(
 expression:
mean(
 expression: `column`,
),
 transformer:
columnNameConcat(
 inputs: \[`column`, `_mean`],
),
)] * **Group by columns:** \[`id`] **Input:** | id | value | distance | airline | | ----- | ----- | ----- | ----- | | 1 | 100 | 2000 | new air | | 1 | 200 | 3000 | new air | | 2 | 500 | 3000 | foundry air | | 2 | 400 | 1000 | foundry air | **Output:** | id | id\_mean | value\_mean | distance\_mean | | ----- | ----- | ----- | ----- | | 1 | 1.0 | 150.0 | 2500.0 | | 2 | 2.0 | 450.0 | 2000.0 | *** ### Example 4: Edge case **Description:** Mean of all integer columns. **Argument values:** * **Condition for columns to aggregate on:**
columnHasType(
 type: Integer,
) * **Dataset:** ri.foundry.main.dataset.a * **Expressions to aggregate:** \[
dynamicAlias(
 expression:
mean(
 expression: `column`,
),
 transformer:
columnNameConcat(
 inputs: \[`column`, `_mean`],
),
)] * **Group by columns:** *null* **Input:** | id | value | distance | | ----- | ----- | ----- | | 1 | 100 | 2000 | | 3 | 500 | 300 | **Output:** | id\_mean | value\_mean | | ----- | ----- | | 2.0 | 300.0 | ***