---
source_url: https://docs.dolphindb.cn/zh/funcs/ho_funcs/rowgroupby.html
fetched_at: 2026-05-19T09:45:15Z
category: funcs
title: rowGroupby
sha1: fc6ce60312f05ca54ee461435e02259c02dd752e
---

# rowGroupby

## 语法

`rowGroupby(func, funcArgs, groupingCol, [mode='tuple'],
[ascending=true])`

## 详情

对 *groupingCol* 的每一行分组后，在每个分组中计算 *func(funcArgs)*，每组的计算结果是一个标量。该函数将根据
*mode* 指定的形式输出结果。

## 参数

**func** 一个聚合函数。

**funcArgs** 是函数 *func* 的参数。如果有多个参数，则用元组表示，且每个元素的维度必须和 *groupingCol*
保持一致。

**groupingCol** 非空矩阵或数组向量，用于分组。

**mode** 可选参数，指定 `rowGroupby` 返回值的数据形式，默认为 "tuple"。可取值为：

- "tuple"：返回一个长度为2的 tuple，其第1个元素是一个数组向量，存储分组变量，第2个元素是一个数组向量，存储各分组中
  *funcArgs* 应用 *func* 后的结果。
- "dict"：返回一个字典。包含两个元素：'key' 和 'value'，分别存储分组变量和各分组中 *funcArgs* 应用*func* 后的结果。
- "table"：返回一个包含两列的表。字段为 "key" 和 "value"，分别存储分组变量及各分组中 *funcArgs* 应用
  *func* 后的结果。

**ascending** 布尔值，表示输出结果按 *groupingCol* 升序还是降序排序。默认值为 true（升序）。

## 返回值

取决于参数 *mode* 的值。

## 例子

下例对表 t 中的 price 列按升序排序后分组，对每个分组内对应的 qty 进行求和。

```dolphindb
sym=`A`B
price = array(DOUBLE[], 0).append!([12.5 12.6 12.5 12.5 12.6, 15.5 15.5 15.5 15.3 15.3])
qty = array(INT[], 0).append!([201 212 220 215 214, 210 213 223 219 211])
t=table(sym,price,qty) 
//指定 mode='dict' 时，以字典形式输出结果，其中 key 存储 price 排序后分组的结果，value 存储对 qty 分组求和的结果
rowGroupby(func=sum,funcArgs=t.qty,groupingCol=t.price,mode='dict') 

/* output:
value->[[636,426],[430,646]]
key->[[12.5,12.6],[15.3,15.5]]
*/

//指定 ascending=false，按照 price 降序输出结果。
rowGroupby(func=sum,funcArgs=t.qty,groupingCol=t.price,mode='dict', ascending=false)
/* output:
value->[[426,636],[646,430]]
key->[[12.6000,12.5000],[15.5000,15.3000]]
*/

//指定 mode='table' 时，以表的形式输出结果，其中 key 存储 price 排序后分组的结果，value 存储对 qty 分组求和的结果
rowGroupby(func=sum,funcArgs=t.qty,groupingCol=t.price,mode='table')
```

| key | value |
| --- | --- |
| [12.5,12.6] | [636,426] |
| [15.3,15.5] | [430,646] |

```dolphindb
//指定 mode='tuple'，输出结果为 tuple，将 tuple 的两个元素重命名后作为表的一列输出。
select rowGroupby(sum, qty, price, 'tuple') as `a`b from t
```

| a | b |
| --- | --- |
| [12.5,12.6] | [636,426] |
| [15.3,15.5] | [430,646] |

接下来通过一个例子来展示如何在矩阵上使用 `rowGroupby` 函数：

```dolphindb
m=matrix([32.5 12.6 22.5 42.5 32.6, 17.5 25.5 35.5 17.3 19.3, 17 20.1 30 13 19])
g=matrix([1 2 2 5 4, 2 2 3 2 1, 1 3 2 3 5])
//对 g 的每行排序后分组，对 m 的每行在每个组内进行求和
rowGroupby(func=sum, funcArgs=m, groupingCol=g, mode='table')
```

| key | value |
| --- | --- |
| [1,2] | [49.5,17.5] |
| [2,3] | [38.1,20.1] |
| [2,3] | [52.5,35.5] |
| [2,3,5] | [17.3,13,42.5] |
| [1,4,5] | [19.3,32.6,19] |
