# Stream Aggregation Function Operator - `StreamAgg`

+ **`StreamAgg`** usually consumes less memory than **`HashAgg`**
+ **`StreamAgg`** requires the row source had been already sorted
+ **`StreamAgg`** is a non-blocking node in the execution flow
+ **`StreamAgg`** does not support parallelism

```
tidb> EXPLAIN SELECT MIN(hire_date) FROM employees;
+-----------------------+-----------+-----------+-----------------+----------------------------------------------------+
| id                    | estRows   | task      | access object   | operator info                                      |
+-----------------------+-----------+-----------+-----------------+----------------------------------------------------+
| ~!@StreamAgg_9@!~           | 1.00      | root      |                 | funcs:min(employees.employees.hire_date)->Column#7 |
| └─TopN_10             | 1.00      | root      |                 | employees.employees.hire_date, offset:0, count:1   |
|  └─TableReader_17     | 1.00      | root      |                 | data:TopN_16                                       |
|   └─TopN_16           | 1.00      | cop[tikv] |                 | employees.employees.hire_date, offset:0, count:1   |
|    └─TableFullScan_15 | 300024.00 | cop[tikv] | table:employees | keep order:false                                   |
+-----------------------+-----------+-----------+-----------------+----------------------------------------------------+
5 rows in set (0.00 sec)
```
------------------------------------------------------------------------------
Next, examine the `Stream_Agg` operator, another algorithm used by the TiDB database optimizer for handling aggregation operations, known as the non-blocking algorithm.