我有一个图形数据库,存储餐馆及其菜单项的数据。数据库中的顶点分别标记为"Restaurant"
和"Item"
,"Item"
顶点通过"OFFERS"
边连接到"Restaurant"
顶点。
数据库中的每个项目都具有诸如价格、名称和描述等属性。一些餐厅有一个"expensive_meter"
属性与他们相关联,而其他没有。
-- Restaurants (vertex)
SELECT * FROM cypher('DeliveryGraph', $$
MATCH (v:Restaurant)
RETURN v.name, v.expensive_meter, v.type, v.address
$$) AS (name agtype, expensive_meter agtype, type agtype, address agtype);
name | expensive_meter | type | address
------------------------------+-----------------+-----------------------+-----------------------------------------------------
"Pagliacci Pizza" | | "Pizzeria" | "10600 Main St, Bellevue, WA 98004, U.S"
"MOD Pizza" | 1 | "Pizzeria" | "317 Bellevue Way NE, Bellevue, WA 98004, U.S"
"Ascend Prime Steak & Sushi" | 4 | "Steakhouse/Japanese" | "10400 NE 4th St Ste 3100, Bellevue, WA 98004, U.S"
(3 rows)
-- Items (vertex)
SELECT * FROM cypher('DeliveryGraph', $$
MATCH (v:Item)
RETURN v.name, v.type, v.price
$$) AS (name agtype, type agtype, price agtype);
name | type | price
-------------------------------------+-----------+-------
"Diavola" | "Pizza" | 25.99
"Chicken Primo" | "Pizza" | 30.49
"The Rocket" | "Pizza" | 25.99
"Mad Dog" | "Pizza" | 10.27
"Tristan" | "Pizza" | 10.27
"Jasper" | "Pizza" | 10.27
"PAT LAFRIEDA PRIME AMERICAN STEAK" | "Beef" | 87.0
"PREMIUM OMAKASE" | "Sushi" | 80.0
"HIVE" | "Dessert" | 68.0
(9 rows)
-- OFFERS (edge)
SELECT * FROM cypher('DeliveryGraph', $$
MATCH (i)<-[:OFFERS]-(r)
RETURN r.name, i.name
$$) AS (restaurant agtype, item agtype);
restaurant | item
------------------------------+-------------------------------------
"Pagliacci Pizza" | "Diavola"
"Pagliacci Pizza" | "Chicken Primo"
"Pagliacci Pizza" | "The Rocket"
"MOD Pizza" | "Mad Dog"
"MOD Pizza" | "Tristan"
"MOD Pizza" | "Jasper"
"Ascend Prime Steak & Sushi" | "PAT LAFRIEDA PRIME AMERICAN STEAK"
"Ascend Prime Steak & Sushi" | "PREMIUM OMAKASE"
"Ascend Prime Steak & Sushi" | "HIVE"
(9 rows)
现在,我想将"expensive_meter"
属性添加到当前没有它的"Restaurant"
顶点,基于它们的项目价格与其他餐馆的"expensive_meter"
值的关系。
例如,如果一家餐馆的商品大多是高价商品,则应该为其分配一个高"expensive_meter"
值。相反,如果一家餐馆提供的大多是价格实惠的商品,它应该有一个较低的"expensive_meter"
值。
我正在寻找如何在我的图表中实现这个逻辑的指导。我可以使用哪些步骤或算法来计算"expensive_meter"
属性并根据与物品价格的关系将其分配给"Restaurant"
顶点?
任何建议、代码片段或相关文档的参考都将不胜感激。提前感谢您的帮助!
1条答案
按热度按时间o2rvlv0m1#
要确定比萨饼的
"expensive_meter"
,您可以将价格划分为四分位数,并计算每个四分位数内的平均价格。尽管Postgres中的ntile
函数对这个任务可能很有用,但目前还不可能将其与Apache AGE中的属性一起使用。但是,您可以通过利用ApacheAGE中的percentileCont函数来实现所需的结果。开始,让我们考虑一个例子,我们要创建5个价格组。我们可以使用以下查询确定每个组的除法值:
查询提供以下结果:
根据这个结果,我们可以确定每个组的价格范围。例如,从0到10.27的价格属于第一组,大于10.27到25.99的价格属于第二组,依此类推。
现在,要为特定餐厅分配
"expensive_meter"
值,您可以计算该餐厅的平均价格并确定相应的价格组。然后可以将"expensive_meter"
设置为组号。