2013-07-09 35 views
1

我目前正在用密码实验一下。我有一个简单的设置组件beeing连接到一个商人由realtionship“销售”有一个财产“价格” (商家 - [:sells {price:10}] - >组件) 我做了一个密码查询,它计算最低的价格,如果你从同一商家购买产品。现在Cypher:group by最便宜的价格

MATCH sup-[s:sells]->component 
WITH SUM(s.price) AS total, sup 
RETURN sup, total 
ORDER BY total ASC 

,而这是工作,我有一个问题找到最便宜的价格(S)的情况下,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

对于我的审美而言,虽然它确实需要三个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 
    
+0

其实你不需要的第二场比赛第 'MATCH SUP供应商 - [s:sells] - >组件 WITH sup,SUM(s.price)AS 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' – PhilBa

+0

您是否在控制台尝试了密码?当我运行它时,我得不到任何行。可能因为没有price_min。 MATCH sup- [s:sells] - >组件 WITH sup,SUM(s.price)AS price_sum WITH MIN(price_sum)AS price_min RETURN price_min –