我有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 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"缺失):
Black,3,1
Black,1,1
Black,5,2
我无法弄清楚为什么结果会有差异?
答案 0 :(得分:2)
因为您使用的是sum()
聚合函数。
Cypher没有GROUP BY
子句(与传统的SQL数据库一样),但是当您使用聚合函数时,所有非聚合字段都会隐式用作分组字段。
因此,当您从return中删除p.Size
时,第一行将与第二行分组,因为隐式分组的所有值都是等于(p.Color = 'Black'
和onstock = 3
)。此外,Sold
列的值在sum()
函数(0 + 1 = 1
)中使用,生成行:
Black,3,1