Cypher:按最便宜的价格分组

时间:2013-07-09 09:19:14

标签: neo4j cypher

我目前正在尝试使用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

这是如何工作的?那么第一部分找到最低价格(通过订购并仅返回第一行)。第二部分再次运行整个查询,并筛选出没有最低价格的项目......所以整个查询运行两次。 任何更好的想法???

1 个答案:

答案 0 :(得分:0)

对于我的审美来说,虽然它确实需要三个WITH子句,但它不那么难看。

  1. 供应商对所有组件的总价
  2. 查找最低价格
  3. 以最低价格退回所有供应商

    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