2013-07-09 32 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 –