postgresql 我们如何在Apache Age中使用过滤器来处理条件?

ef1yzkbh  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(5)|浏览(103)

在PostgreSQL中,我们可以使用过滤器,例如-

SELECT column_name,
       SUM(sales) FILTER (WHERE year = 2022) AS total_sales_2022,
       SUM(sales) FILTER (WHERE year = 2023) AS total_sales_2023
FROM sales_table
GROUP BY column_name;

我们如何在Apache时代实现这一点?谁来帮帮我PLZ

yacmzcpb

yacmzcpb1#

根据Doc
为了计算聚合数据,Cypher提供了聚合,类似于SQL的GROUP BY。
一个等价的密码查询是:

SELECT * FROM cypher('sales', $$
MATCH (product) WHERE product.year = 2022 WITH product.name as name, count(*) as c, SUM(product.sales) as 
sales
RETURN name, sales
$$) AS (name agtype, sales agtype);

该查询将匹配产品,根据年份进行过滤,并使用COUNT(类似于GROUP BY)应用聚合。然后,您可以应用SUM聚合函数来计算每个产品的总销售额。

mwngjboj

mwngjboj2#

在apacheAGE中,我们处理的不是表,而是节点和边。那些节点/边通过它们的标签和/或属性保持信息。例如:

SELECT * FROM cypher('test_graph', $$
CREATE (u:Person {name: 'John'})
CREATE (v:Person {name: 'Jake'})
CREATE (k:Person {name: 'Alice'})
CREATE (l:Person {name: 'Anna'}) $$)
AS (u agtype);

这里我们创建了4个不同的节点,标签为Person,属性为name。如果我们想通过标签找到一个节点,我们可以这样做:

SELECT * FROM cypher ('test_graph', $$
MATCH (u:Person)
RETURN u $$)
as (u agtype);

这将返回图中属于Person标签的所有节点。类似地,我们可以过滤节点的属性,例如:

SELECT * FROM cypher ('test_graph', $$
MATCH (u:Person) 
WHERE u.name = 'John'
RETURN u $$)
as (u agtype);

在这里,这将只返回具有属性name的节点,并且它等于'John'

ykejflvf

ykejflvf3#

要在age中对聚合函数使用过滤器,请查看WITH关键字https://age.apache.org/age-manual/master/clauses/with.html

t5fffqht

t5fffqht4#

让我们举个例子,假设你想返回所有的用户,除了那些名字是hossam的,那么你可以通过下面的查询来做到这一点:

testdb=# SELECT * FROM ag_catalog.cypher('test', $$ MATCH(n: User) WHERE n.name <> 'hossam' RETURN n$$) as (users agtype) ;

这将返回名称不等于hossam的所有用户。您可以注意到,我们使用WHERE子句应用了一个过滤器,该子句用于此目的。
我希望这能给予你一个如何在年龄上使用过滤器的感觉。

9avjhtql

9avjhtql5#

一旦创建了图表沿着所需的节点和属性,就可以在ApacheAGE中以这种方式执行postgresql查询

SELECT *
FROM cypher('your_graph', $$
MATCH (u {year: 2022})
WITH sum(u.sales) as total_sales_2022
ORDER BY u.column_name
RETURN u.column_name, total_sales_2022
$$) AS (column_name agtype, total_sales agtype);

您可以访问AGE docs以了解有关AGE中WITH、ORDER BY和RETURN子句的更多信息。

相关问题