Graphql 是否有一种方法可以将每个项目与一个已修改的值进行比较?
我对graphQL和Hasura是新手。我尝试(在Hasura中)让我的用户提供自定义聚合(理想情况下是以普通graphQL查询的形式),然后将结果与聚合进行比较 这里有一个例子。假设我有这个模式:Graphql 是否有一种方法可以将每个项目与一个已修改的值进行比较?,graphql,hasura,Graphql,Hasura,我对graphQL和Hasura是新手。我尝试(在Hasura中)让我的用户提供自定义聚合(理想情况下是以普通graphQL查询的形式),然后将结果与聚合进行比较 这里有一个例子。假设我有这个模式: USERTABLE: userID Name Age City Country Gender HairColor INCOMETABLE: userID Income 我在hasura中创建了一个关系,我可以查询数据,但我的用户希望对用户的收入水平进行自定义评分。例如,一个用户可能希望查询按国家
USERTABLE:
userID
Name
Age
City
Country
Gender
HairColor
INCOMETABLE:
userID
Income
我在hasura中创建了一个关系,我可以查询数据,但我的用户希望对用户的收入水平进行自定义评分。例如,一个用户可能希望查询按国家和性别细分的数据
对于第一个示例,结果可能是:
{Country : Canada
{ gender : female
{ userID: 1,
Name: Nancy Smith,..
#data below is on aggregated results
rank: 1
%fromAverage: 35%
}...
我所挣扎的是显示与聚合数据相关的用户信息的数据
对于排名,我通过排序获得顺序,但我不确定如何显示相对排名,对于%fromAverage,我根本不确定如何显示
在哈苏拉有办法做到这一点吗?我怀疑actions可能可以做到这一点,但我不确定。您可以使用跟踪Postgres视图。视图中的字段数量与您希望在SQL中计算的字段数量相同,并在GraphQLAPI上作为一个单独的“表”进行跟踪 我在下面给出的例子是基于一个简化,其中您只有一个名为contacts的表,只有一个名为:
id
的字段,它是一个自动整数。我只是将当前联系人的id添加到avg(id)(这是一个毫无意义的尝试,只是为了说明…)。显然,您可以根据自己的喜好定制逻辑
视图的简单实现如下所示(确保在hasura中点击“跟踪此项”:
CREATE OR REPLACE VIEW contact_with_custom AS
SELECT id, (SELECT AVG(ID) FROM contacts) + id as custom FROM contacts;
看
另一种选择是使用计算字段。这只是一个postgres函数,它将一行作为参数并返回一些数据,它只是向Graphql API中现有的“表”中添加一个新字段,该字段是该函数的返回值。(您不需要“跟踪此”函数;在Hasura的SQL部分中创建后,您可以将其作为相关表的“修改”下的“计算字段”添加)需要注意的是,此选项不允许您按此计算函数进行筛选,而在视图中,所有字段都是可筛选的
在上述同一模式中,计算字段的函数如下所示:
CREATE OR REPLACE FUNCTION custom(contact contacts)
RETURNS Numeric AS $$
SELECT (SELECT AVG(ID) from contacts ) + contact.id
$$ LANGUAGE sql STABLE;
然后你为你的计算字段选择这个函数,给它命名你想要的名字
请参见为什么不在你的客户端代码中进行动态计算?你的前端堆栈是什么?@AbrahamLabkovsky问得好!我只是提供了一个API,我的用户有自己的客户端软件。我认为如果他们能直接通过查询进行评分,这将是一个很酷的附加值。