Neo4j:为什么结果不同?

Neo4j:为什么结果不同?,neo4j,cypher,Neo4j,Cypher,我有密码查询: match(p:Product {StyleNumber : "Z94882A", Color: "Black"})--(stock:Stock {Retailer: "11"}) with sum(stock.Stockcount) as onstock, p optional match(p)-->(s:Sale {Retailer : "11"}) where s.Date = 20170801 return p.Color,p.Size, onstock a

我有密码查询:

match(p:Product {StyleNumber : "Z94882A", Color: "Black"})--(stock:Stock {Retailer: "11"}) 
with  sum(stock.Stockcount) as onstock, p
optional match(p)-->(s:Sale {Retailer : "11"}) 
where s.Date = 20170801 
return p.Color,p.Size, onstock as stock, sum(s.Quantity) as sold
这正确地给出了:

Color,Size,Stock,Sold
Black,M,3,0
Black,S,3,1
Black,L,1,1
Black,XL,5,2
但是如果我在return语句中省略Size属性,只返回:

return p.Color, onstock as stock, sum(s.Quantity) as sold
这只返回3行(缺少大小“M”):


我不明白为什么结果会有差异?

因为您使用的是
sum()
聚合函数

Cypher没有
GROUP BY
子句(与传统的SQL数据库类似),但当您使用聚合函数时,所有非聚合字段都隐式用作分组字段

因此,当您从返回中删除
p.Size
时,第一行与第二行分组,因为隐式分组的所有值都相等(
p.Color='Black'
onstock=3
)。另外,
saled
列的值用于
sum()
函数(
0+1=1
),生成以下行:

Black,3,1

这是有道理的。。。但是我还是有点困惑。。。假设我只想按颜色分组,得到库存(12)和售出(4)的总和。。。如果我将return语句更改为:
将p.Color、sum(onstock)作为stock、sum(s.Quantity)作为sall返回
。这将返回17个库存(而不是12个),因为XL有2个销售(每个销售1个数量,但有5个库存)。。。。。不明白:(。。。。。
Black,3,1