Cypher计数返回null而不是0
问题描述:
如何使此计数返回为零?任何时候我想返回的任何字段都等于零,整个查询返回null?我一直在遇到这个问题,我迫切需要一个解决方案。Cypher计数返回null而不是0
START bp=node({startnodeid})
WITH bp
MATCH (bp)<-[r1?:VIEWED_PROFILE]-()
WHERE r1.timestamp > {weekStart} AND r1.timestamp < {firstDay}
WITH count(r1) AS dayOne, bp
MATCH (bp)<-[r2?:VIEWED_PROFILE]-()
WHERE r2.timestamp > {firstDay} AND r2.timestamp < {secondDay}
WITH count(r2) AS dayTwo, dayOne, bp
MATCH (bp)<-[r3?:VIEWED_PROFILE]-()
WHERE r3.timestamp > {secondDay} AND r3.timestamp < {thirdDay}
WITH count(r3) AS dayThree, dayTwo, dayOne, bp
MATCH (bp)<-[r4?:VIEWED_PROFILE]-()
WHERE r4.timestamp > {thirdDay} AND r4.timestamp < {fourthDay}
WITH count(r4) AS dayFour, dayThree, dayTwo, dayOne, bp
MATCH (bp)<-[r5?:VIEWED_PROFILE]-()
WHERE r5.timestamp > {fourthDay} AND r5.timestamp < {fifthDay}
WITH count(r5) AS dayFive, dayFour, dayThree, dayTwo, dayOne, bp
MATCH (bp)<-[r6?:VIEWED_PROFILE]-()
WHERE r6.timestamp > {fifthDay} AND r6.timestamp < {sixthDay}
WITH count(r6) AS daySix, dayFive, dayFour, dayThree, dayTwo, dayOne, bp
MATCH (bp)<-[r7?:VIEWED_PROFILE]-()
WHERE r7.timestamp > {sixthDay} AND r7.timestamp < {seventhDay}
RETURN count(r7) AS daySeven, daySix, dayFive, dayFour, dayThree, dayTwo, dayOne
由于统计学的原因,我需要前7天的配置文件视图。
新控制台:http://console.neo4j.org/?id=cy5v5k
在此控制台例子中,时间戳是奇数在我的参数如下:
weekStart = 0;
firstDay = 2;
secondDay = 4;
thirdDay = 6;
fourthDay = 8;
fifthDay = 10;
sixthDay = 12;
seventhDay = 14;
和我预期的返回值如下:
dayOne = 1;
dayTwo = 3;
dayThree = 2;
dayFour = 1;
dayFive = 1;
daySix = 4;
daySeven = 0;
答
您使用的是2.0吗?如果是这样,你应该完全重新组织这个查询,以便使用CASE/WHEN
并在那里突破你的一周的日子,而不是单独做WITH
条款。 http://console.neo4j.org/r/utsrzy
MATCH (n)-[r:VIEWED_PROFILE]->(p)
RETURN sum(CASE WHEN r.timestamp > 0 AND r.timestamp < 2 THEN 1 ELSE 0 END) AS day1,
sum(CASE WHEN r.timestamp > 2 AND r.timestamp < 4 THEN 1 ELSE 0 END) AS day2,
sum(CASE WHEN r.timestamp > 4 AND r.timestamp < 6 THEN 1 ELSE 0 END) AS day3,
sum(CASE WHEN r.timestamp > 6 AND r.timestamp < 8 THEN 1 ELSE 0 END) AS day4,
sum(CASE WHEN r.timestamp > 8 AND r.timestamp < 10 THEN 1 ELSE 0 END) AS day5,
sum(CASE WHEN r.timestamp > 10 AND r.timestamp < 12 THEN 1 ELSE 0 END) AS day6,
sum(CASE WHEN r.timestamp > 12 AND r.timestamp < 14 THEN 1 ELSE 0 END) AS day7
如果您使用1.9,而不是count(r7)
等,做count(1)
。
更新,该快速修复不适用于1.9。这里有一个比特收集操作来获得1.9为你做到这一点:
http://console.neo4j.org/r/cata9u
START bp=node(1)
MATCH (bp)<-[r1?:VIEWED_PROFILE]-()
WITH collect(r1.timestamp) AS times
RETURN length(filter(t IN times WHERE t > 0 AND t < 2)) AS day1,
length(filter(t IN times WHERE t > 2 AND t < 4)) AS day2,
length(filter(t IN times WHERE t > 12 AND t < 14)) AS day7
我希望我用2.0。我使用1.9。 – user1325194
你能解释一下在这种情况下计算(1)的数量吗?我从来没有见过它像以前那样使用。 – user1325194
实际上,count(1)仍然没有返回。 – user1325194