跳转到主要内容

orderBy 枚举

每个 Cube 会生成 {Cube}OrderBy 枚举,包含每个可排序维度的 ASC 与 DESC 变体。命名规则为维度路径以下划线连接:
{DimensionGroup}_{DimensionField}_ASC
{DimensionGroup}_{DimensionField}_DESC
嵌套维度每一级都参与拼接:
Trade_Buy_Amount_ASC
Trade_Buy_PriceInUSD_DESC
Block_Time_ASC

常见 orderBy 取值

Enum ValueCube(s)Description
Block_Time_ASCDEXTrades, Transfers, BalanceUpdates, DEXPools, TokenSupplyUpdates, Pairs, Tokens最旧在前
Block_Time_DESCDEXTrades, Transfers, BalanceUpdates, DEXPools, TokenSupplyUpdates, Pairs, Tokens最新在前
Interval_Time_Start_ASCPairs, Tokens最旧在前(区间起始时间)
Interval_Time_Start_DESCPairs, Tokens最新在前(区间起始时间)
Trade_Buy_Amount_DESCDEXTrades买入量最大在前
Trade_Buy_PriceInUSD_DESCDEXTradesUSD 价格最高在前
Transfer_AmountInUSD_DESCTransfersUSD 转账额最大在前
LatestBalanceUSD_DESCTokenHolders持仓 USD 最大在前
BuyVolumeUSDState_DESCWalletTokenPnL买入量 USD 最大在前
GraphQL IDE 中用自动补全查看某 Cube 全部可用 orderBy — 输入 orderBy: 即可列出完整枚举。

用法

orderBy 传入单个枚举值:
query {
  DEXTrades(
    network: sol
    orderBy: Block_Time_DESC
    limit: { count: 10 }
  ) {
    Block { Time }
    Trade { Buy { Amount PriceInUSD } }
  }
}
orderBy 只接受一个枚举值。不支持多列排序 — 查询仅按单一维度排序。

limit 参数

limit 控制返回行数,并支持基于 offset 的分页:
input LimitInput {
  count: Int   # Number of rows to return
  offset: Int  # Number of rows to skip
}

默认与最大限制

每个 Cube 在省略 limit 时有默认行数上限,并有最大上限:
CubeDefault countMaximum count
DEXTrades2510,000
Transfers2510,000
BalanceUpdates2510,000
DEXPools2510,000
TokenSupplyUpdates2510,000
Pairs2510,000
Tokens2510,000
DEXPoolEvents2510,000
TokenHolders2510,000
WalletTokenPnL2510,000
若请求的 count 超过最大值,服务端会静默截断为最大值。

基于 offset 的分页

使用 offset 翻页,模式如下:
  • 第 1 页limit: { count: 50, offset: 0 }
  • 第 2 页limit: { count: 50, offset: 50 }
  • 第 3 页limit: { count: 50, offset: 100 }

示例:Token 持有者分页

query {
  TokenHolders(
    network: sol
    tokenAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
    orderBy: LatestBalanceUSD_DESC
    limit: { count: 20, offset: 0 }
  ) {
    Holder { Address }
    LatestBalance
    LatestBalanceUSD
  }
}

分页建议

没有稳定排序时,行间顺序可能在翻页时变化。请始终将 limit 与能产生确定顺序的 orderBy 一起使用。
很大的 offset(例如 50,000+)可能拖慢查询,因为数据库需要扫描并跳过行。对超大数据集,优先用 where 收窄结果,而非深度分页。
若某页返回行数少于请求的 count,说明已到数据集末尾。也可事先使用指标字段 count 获取总行数。

实用示例

最新大额成交

获取 Solana 上最近 10 笔买入价值超过 $10,000 的 DEX 成交:
query {
  DEXTrades(
    network: sol
    where: {
      Trade: { Buy: { PriceInUSD: { gt: 10000 } } }
    }
    orderBy: Block_Time_DESC
    limit: { count: 10 }
  ) {
    Block { Time }
    Trade {
      Buy {
        Currency { MintAddress }
        Amount
        PriceInUSD
      }
      Dex { ProtocolName }
    }
  }
}

OHLC 蜡烛 — 最近 60 分钟

获取某 token 的 1 分钟 K 线,按时间正序:
query {
  Trading {
    Pairs(
      where: {
        Token: { Address: { is: "So11111111111111111111111111111111111111112" } }
        Market: { Network: { is: "sol" } }
        Block: { Time: { after: "2025-03-27T09:00:00Z" } }
      }
      orderBy: Block_Time_ASC
      limit: { count: 60 }
    ) {
      Block { Time }
      Price {
        Ohlc { Open High Low Close }
      }
      Volume { Usd }
      Stats { TradeCount }
    }
  }
}

Top 50 Token 持有者

按 USD 余额排序取前 50 名持有者:
query {
  TokenHolders(
    network: sol
    tokenAddress: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
    orderBy: LatestBalanceUSD_DESC
    limit: { count: 50 }
  ) {
    Holder { Address }
    LatestBalance
    LatestBalanceUSD
    FirstSeen
    LastSeen
  }
}

下一步

筛选

将排序与 Filter 结合,构建精确的分析查询。

指标与聚合

使用 count、sum、avg、min、max、uniq 对已排序数据聚合。