如何编写累加器Cypher查询以返回无重复的手机产品颜色?
嘿,这问题我熟!来给你一步步拆解:
修改查询获取不重复颜色值
要去掉结果里重复的color,直接用Cypher的DISTINCT关键字就搞定了,它会自动帮你过滤掉重复的取值。修改后的查询如下:
MATCH (s:Product {type:'Phone'})-[r]->(o:Attributes) WHERE EXISTS(o.color) RETURN DISTINCT o.color
要是你还想顺便统计每种颜色对应多少款手机(这个需求挺常见的),可以搭配聚合函数COUNT()来写,这时候查询会长这样:
MATCH (s:Product {type:'Phone'})-[r]->(o:Attributes) WHERE EXISTS(o.color) RETURN o.color, COUNT(s) AS product_count
关于是否属于累加器查询范畴
先给你明确结论:
- 单纯用
DISTINCT去重的查询不属于累加器查询,它只是对返回的结果集做去重过滤,没有进行任何累加、统计类的聚合计算。 - 但如果用上了
COUNT()、SUM()这类聚合函数(就像上面第二个查询那样),那这个查询就属于累加器查询范畴了——因为它需要遍历所有匹配的节点,对数据进行累加统计操作。
简单总结:去重本身不算累加器查询,加上聚合统计才是~
内容的提问来源于stack exchange,提问作者user697911
相关产品推荐
相关产品推荐

