如何编写此累加器查询?

时间:2018-03-28 18:04:00

标签: neo4j cypher

match (s:Product {type:'Phone'})-[r]->(o:Attributes) where exists(o.color) return s.name, o.color

此查询返回æ¯ä¸ªäº§å“å称åŠå…¶â€œé¢œè‰²â€å±žæ€§ã€‚在这ç§æƒ…况下,将åå¤æ˜¾ç¤ºè®¸å¤šé‡å¤çš„产å“和颜色。相å,我想è¦è¿”回所有“颜色â€è€Œä¸é‡å¤ã€‚例如,在结果集中,å¯èƒ½æœ‰100个产å“,但åªæœ‰5ç§ä¸åŒçš„颜色。我想åªè¿”回5ç§ä¸åŒçš„颜色。

如何实现?是å¦ä»ç„¶å¯ä»¥å°†s.name和独特颜色一起返回?如果没有,åªéœ€è¿”回独特的颜色å³å¯ã€‚

编辑: 这似乎有效:

return collect(distinct(o.color)) limit 5

它返回唯一的“颜色â€ï¼Œä½†â€œé™åˆ¶5â€ä¸èµ·ä½œç”¨ã€‚它返回所有独特的颜色。

1 个答案:

答案 0 :(得分:1)

LIMITå­å¥é™åˆ¶è¿”回记录的数é‡ã€‚您的第二个查询返回å•ä¸ªè®°å½•ï¼ˆç”±æ‰€æœ‰ä¸åŒé¢œè‰²çš„å•ä¸ªé›†åˆç»„æˆï¼‰ã€‚ LIMITå­å¥å¯¹è¯¥é›†åˆä¸­çš„项目数没有影å“。

最多获得5ç§ä¸Žï¼†ï¼ƒ34; Phone"相关的独特颜色。 Product(s),你å¯ä»¥è¿™æ ·åšï¼š

MATCH (:Product {type:'Phone'})-->(o:Attributes)
WHERE EXISTS(o.color)
RETURN DISTINCT o.color AS color
LIMIT 5;

此查询将为æ¯ç§å”¯ä¸€é¢œè‰²è¿”回一æ¡è®°å½•ã€‚è¦èŽ·å¾—所有与" Phone"相关的独特颜色。 Product(s),åªéœ€åˆ é™¤LIMITæ¡æ¬¾ã€‚

如果您想获得最多5ç§ç‹¬ç‰¹é¢œè‰²çš„å•ä¸€é›†åˆï¼Œæ‚¨å¯ä»¥è¿™æ ·åšï¼š

MATCH (:Product {type:'Phone'})-->(o:Attributes)
WHERE EXISTS(o.color)
WITH DISTINCT o.color AS color
LIMIT 5
RETURN COLLECT(color) AS colors;

[UPDATE]

按频率é™åºèŽ·å¾—å‰5ç§é¢œè‰²ï¼š

MATCH (:Product {type:'Phone'})-->(o:Attributes)
WHERE EXISTS(o.color)
WITH o.color AS color, COUNT(*) AS colorCount
ORDER BY colorCount DESC
RETURN color
LIMIT 5;

请注æ„,ä¸éœ€è¦DISTINCT,因为WITHå­å¥ä½¿ç”¨aggregating function(COUNT)color作为分组键。这会导致WITHå­å¥çš„输出为具有ä¸åŒcolor值的记录。