# 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 |
***