我目前正在尝试使用cypher。我有一个简单的设置组件连接到商家的实际关系“卖”有一个属性“价格” (商家 - [:{出售价格:10}] - GT;成分) 如果你从同一个商家购买产品,我做了一个cypher查询计算最低价格。
MATCH sup-[s:sells]->component
WITH SUM(s.price) AS total, sup
RETURN sup, total
ORDER BY total ASC
现在,虽然这是有效的,但我发现最便宜的价格,以防2个或更多供应商被捆绑。我喜欢得到像
这样的东西_________________________
| price | supplier |
-------------------------
| 60 | conrad |
| | amazon |
-------------------------
您可以在此处查看我的设置: http://console.neo4j.org/?id=wpz165
编辑: 好吧,我找到了一种方法,虽然它不漂亮。
MATCH sup-[s:sells]->component
WITH SUM(s.price) AS minprice, sup
ORDER BY minprice
LIMIT 1
MATCH sup2-[s2:sells]->component2
WITH SUM(s2.price) AS total2, sup2, minprice
WHERE total2 = minprice
RETURN minprice, sup2
这是如何工作的?那么第一部分找到最低价格(通过订购并仅返回第一行)。第二部分再次运行整个查询,并筛选出没有最低价格的项目......所以整个查询运行两次。 任何更好的想法???
答案 0 :(得分:0)
对于我的审美来说,虽然它确实需要三个WITH子句,但它不那么难看。
以最低价格退回所有供应商
MATCH sup-[s:sells]->component
WITH sup, SUM(s.price) AS price_sum
MATCH sup, price_sum
WITH MIN(price_sum) AS price_min
MATCH sup2-[s2:sells]->component2
WITH sup2, SUM(s2.price) AS price_sum2, price_min
WHERE price_sum2 = price_min
RETURN sup2, price_sum2