我对用neo4j数据库进行Cypher查询有疑问。假设我有许多节点,例如(node:student {name:“ Alice”})。 如何获得密码查询中最常出现的名称?
我有一个简单的解决方案,例如:
MATCH (n:student)
RETURN n.name,count(*) as times
ORDER BY times DESC
LIMIT 1;
是否有另一种无需使用ORDER BY和LIMIT子句即可获得相同结果的方法?如MAX(),.. etc等任何内置函数
答案 0 :(得分:0)
max()
用于查找所有行中的最大值,但您并不是真正在寻找该值,而是希望使用它来匹配具有该最大值的相关行。
要获得max()
,您需要汇总所有行,以便它考虑所有行的最大值(非汇总变量成为分组键,如果所有变量都是汇总,则它考虑整个集合)。那时,您可以只过滤那些具有最大值的汇总行,然后将它们退绕成行并返回。
MATCH (n:student)
WITH n.name as name, count(*) as times
WITH collect({name:name, times:times}) as rows, max(times) as max
UNWIND [row in rows WHERE row.times = max] as row
RETURN row.name as name, row.times as times