当前位置: 首页 > 知识库问答 >
问题:

GraphQL中对聚合函数的支持

薛烈
2023-03-14

我对GraphQL的分析解决方案非常感兴趣(想想一个显示图形的webapp)。但我找不到任何使用聚合函数的GraphQL示例。这是我的前端完成的大多数查询的一个主要方面。

对于我的解决方案,我们有3个典型的后端调用。

  1. 搜索

假设我们在GraphQL中指定了这种类型

type Person {
  name: String
  age: Int
  create_time: Date
}
  1. 搜寻

GraphQL似乎很好地处理了这一点。毫无疑问。

ex.搜索Bob的年龄{Person(name:"Bob"){age}}

这是我希望在饼图中显示信息的典型情况。假设我想按年龄统计人数。

以下是PostgreSQL查询:

SELECT age, count(*) from Ticket group by age;

什么是等效的GraphQL?

比方说,我想计算每小时创建的用户数。

以下是PostgreSQL查询:

SELECT date_trunc('hour', create_time) as create_time_bin, count(*) from Person group by create_time_bin order by create_time_bin ASC;

什么是GraphQL等效查询?

共有3个答案

斜瑞
2023-03-14

退房https://github.com/niclasko/Cypher.js(注:我是作者)

与问题相关。它可用于查询和聚合来自JSONendpoint的数据:

load json from "http://url/person" as l return l.age, count(1)

甚至还有条形图功能:

load json from "http://url/person" as l return barchart(toint(l.age)) as age_distribution

下面是一个查询复杂JSON文档并对其执行聚合分析的示例:

Cypher.jsJSON查询示例

姜弘新
2023-03-14

@Damien,这些问题不是GraphQL的问题。

每当您想在GraphQL中执行某些操作时,都必须定义一种返回数据类型、您实现的函数规范,有时还必须定义一种输入数据类型,以便输入到您的函数中。最后编写代码来完成这项工作。

事实上,看起来您(重新)使用GraphQL语言编写代码。

以要在饼图中显示信息的示例为例:

SELECT age, count(*) from Ticket group by age;

定义您的退货数据这里是年龄和计数列表:

 type TickGroupByAge {
      age: Int
      count: Int
    }

用GraphQL语言定义函数或查询:

getTicketGroupByAge : [TickGroupByAge]`

最后编写一个函数来实现上述查询:

async function(){
    const res = await client.query("SELECT age, count(*) from Ticket group by age");
    return res.rows;
}

@Ryan我完全同意您的看法,GraphQL迫使您编写大量类型定义来解决一个简单的任务。出于这个原因,我最终构建了自己的NextQL-GraphQL类引擎,它与GraphQL类似,但更简单。

我的项目支持复杂的嵌套类型定义,这使您不必定义许多无用的类型定义。

瞿和硕
2023-03-14

一天结束时,GraphQL会用您定义的类型进行响应。您只需要将该数据放入一个类型中。无论这是这些不同查询的特定类型,还是现有类型上数据的字段,都取决于您,但归根结底就是这些。GraphQL确实需要在定义类型和所有查询返回的内容方面付出更多的努力,这使得它更加严格,但其思想是,在另一方面存在一些很酷的特性,比如内省和类型检查。如果将这种“特殊”数据结构放入GraphQL类型似乎没有逻辑意义,那么如果您需要其他数据源,使用非GraphQLendpoint并不违法。

 类似资料:
  • 我需要聚合一个基于1分钟时间间隔的数据集。当我尝试此操作时,它会抛出错误: 我的数据集如下所示 org.apache.spark.sql.AnalysisException:无法解析(datetime,value)中的列名“60秒”;在org.apache.spark.sql.dataset$$anonfun$resolve$1.apply(dataset.scala:216)在org.apach

  • 弹性搜索不推荐使用方面,建议使用聚合(http://www.Elastic.co/guide/en/elasticsearch/reference/1.x/search-aggregations.html)。 Spring数据弹性搜索目前支持这个吗? 如果有,有样品吗?

  • 主要内容:1.COUNT函数,2. SUM函数,3. AVG函数,4. MAX函数,5. MIN函数SQL聚合函数用于对表的单个列的多行执行计算,它只返回一个值。它还用于汇总数据。 SQL聚合函数的类型,如下图所示 - 接下来,我们一个个地讲解。 1.COUNT函数 函数用于计算数据库表中的行数,它可以在数字和非数字数据类型上工作。 函数使用返回指定表中所有行的计数。 包函重复值和值。 语法 假设有一个表,它的结构和数据如下所示 - PRODUCT COMPANY QTY RATE COST I

  • 问题内容: 在解释CTE的一些概念时,有人问了一个可爱的问题..我们可以找到行的乘法吗,而我们总是从新手开始集中精力。那给了我一个想法!仅使用SQL是否有可能。我还考虑了我们甚至可以支持的最大精度,因为该产品可能非常庞大。 话虽如此,我们不能编写自己的聚合函数。(可以吗?)我在想仅使用SQL就有可能。 我想到的就像是自己添加2,3次。.但是当集合很大时..由于繁琐,我无法实现。 另一个可能是和,为

  • 在介绍 Django 中 ORM 模型的聚合函数之前,我们先要了解下 MySQL 中常用的聚合函数。首先同样是准备数据,使用我i们之前在第 18 小节中完成的插入 100 条数据的代码,重新执行一次: (django-manual) [root@server test]# python insert_records.py 批量插入完成 此时,连同上次操作剩余的两条会员记录,数据库中总共有 10

  • 查看SQL的ANSI聚合函数,我找不到字符串的任何东西。但是,每个数据库似乎都有自己的数据库,例如MySQL和Oracle的GROUP_CONCAT和LISTAGG,这使得可移植性有点困难。我是不是缺了什么?这是有原因的吗?