Skip to content

GraphQL 聚合参考

数据墙DBW 的 GraphQL 端点支持聚合查询,可在服务端直接完成统计计算。聚合操作由数据库执行,只返回统计结果,不需要传输原始数据。

IMPORTANT

聚合查询仅 SQL Server 支持。PostgreSQL 和 MySQL 不支持。

数据库支持

数据库聚合支持
SQL Server
PostgreSQL
MySQL

聚合函数

函数适用字段说明
count任意字段非空值的计数
sum数字字段所有值的总和
avg数字字段所有值的算术平均值
min数字字段最小值
max数字字段最大值

NOTE

如果实体没有任何数字列,引擎不会为该实体生成聚合节点。count 仍然可用但无法在聚合节点中使用(需通过分组查询的 count 实现)。

基本聚合

count — 计数

graphql
{
  books_aggregate {
    count
  }
}
json
{
  "data": {
    "books_aggregate": {
      "count": 42
    }
  }
}

sum — 求和

graphql
{
  books_aggregate {
    sum { pages }
  }
}
json
{
  "data": {
    "books_aggregate": {
      "sum": { "pages": 12500 }
    }
  }
}

avg — 平均

graphql
{
  books_aggregate {
    avg { pages year }
  }
}
json
{
  "data": {
    "books_aggregate": {
      "avg": { "pages": 298, "year": 1995 }
    }
  }
}

min / max — 极值

graphql
{
  books_aggregate {
    min { year pages }
    max { year pages }
  }
}
json
{
  "data": {
    "books_aggregate": {
      "min": { "year": 1951, "pages": 120 },
      "max": { "year": 2024, "pages": 800 }
    }
  }
}

组合多个聚合

一次查询中可以组合所有需要的聚合:

graphql
{
  books_aggregate {
    count
    avg { pages }
    sum { pages }
    min { year }
    max { year }
  }
}

带筛选的聚合

聚合查询支持 filter 参数,只统计满足条件的记录:

graphql
{
  books_aggregate(filter: { year: { gte: 2000 } }) {
    count
    avg { pages }
  }
}

筛选语法与普通查询的 filter 完全一致,支持所有比较运算符和逻辑组合:

graphql
{
  books_aggregate(
    filter: {
      and: [
        { year: { gte: 2000 } }
        { pages: { gt: 200 } }
      ]
    }
  ) {
    count
    avg { pages year }
  }
}

distinct 修饰符

distinct: true 仅统计唯一值:

graphql
{
  books_aggregate {
    count(distinct: true)
  }
}

适用于 count 函数。计算去重后的非空值数量。

groupBy 分组查询

按指定字段分组,分别统计各组:

graphql
{
  books_group_by(groupBy: { category_id: true }) {
    items {
      category_id
      count
      avg { pages }
      sum { pages }
    }
  }
}

分组查询返回 items 数组,每条包含:

字段说明
{分组字段}分组字段的值
聚合函数该组的统计结果

NOTE

当前分组聚合的 groupBy 仅支持单字段。分组字段必须在查询中显式列出。

having 过滤

having 在分组聚合之后过滤结果(类似 SQL HAVING):

graphql
{
  books_group_by(
    groupBy: { category_id: true }
    having: { pages: { sum: { gt: 1000 } } }
  ) {
    items {
      category_id
      count
      sum { pages }
    }
  }
}

having 作用于聚合结果——只保留满足条件的分组。支持对聚合函数值的比较(gtgteltlteeqneq)。

MCP aggregate-records 超时

MCP 中的 aggregate_records 工具有独立的查询超时配置:

json
{
  "runtime": {
    "mcp": {
      "dml-tools": {
        "aggregate-records": {
          "enabled": true,
          "query-timeout": 60
        }
      }
    }
  }
}
字段说明默认值范围
query-timeout聚合查询超时秒数301–600

聚合查询在大数据量下可能比普通查询更耗时,适当调高此值可避免超时。MCP 聚合超时与数据库连接字符串超时取更短者

聚合不支持的能力

不支持说明
排序聚合查询结果不支持 orderBy
分页聚合结果不支持 first/after(只有一行或一个分组数组)
多字段 groupBy当前仅支持单字段分组
PostgreSQL/MySQL聚合功能不适用于这两个数据库

下一步

数据墙DBW 产品文档与开发指南。