我有一个学生和他们读过的各种书的图表。我想找出前10%读过最多书的学生。我该怎么做呢?我尝试了以下密码语法:
MATCH (s:Student)-[:READ]->(b:Book)
WITH s, COUNT(b) AS no_of_books
WHERE no_of_books > percentileCont(no_of_books, 0.9)
RETURN s.Name, no_of_books
返回错误"无效使用聚合函数"。在这里,试图在彼此之上使用两个聚合函数似乎是一个问题。我如何调整我的语法使其工作?
如果LIMIT函数也能处理百分比,我很乐意使用它。
回答我自己的问题(再次),以防其他人正在查找相同的问题
MATCH (s:Student)-[:READ]->(b:Book)
WITH s, COUNT(b) AS no_of_books
ORDER BY no_of_books DESC
WITH COLLECT ({Student_Name: s.Name, No_of_Books: no_of_books}) AS books_per_stu
WITH books_per_stu, toInteger(size(books_per_stu)/100) AS percentile
UNWIND book_per_stu[0..percentile] AS top_stu
RETURN top_stu
似乎,令人惊讶的是,没有直接的方法来做到这一点,就像我的伪代码在我的第一篇文章。上述语法将以字典列表的形式返回结果,而不是以表格格式返回结果。我仍然欢迎任何比我简单的答案。