2013-11-20 2 views
0

어떻게이 계수를 0으로 계산합니까? 언제든지 반환 된 원하는 모든 필드가 0 인 경우, 전체 쿼리는 null을 반환합니까? 나는 계속이 문제에 부딪 히고 필사적으로 해결책이 필요하다.Cypher Count가 0 대신 null을 반환합니다.

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 일 동안 프로필보기가 필요합니다.

네오 콘솔 :

weekStart = 0; 
firstDay = 2; 
secondDay = 4; 
thirdDay = 6; 
fourthDay = 8; 
fifthDay = 10; 
sixthDay = 12; 
seventhDay = 14; 

을 다음과 같이 나의 기대 수익 값을했다 : 다음과 같이 http://console.neo4j.org/?id=cy5v5k이 콘솔의 예에서

, 타임 스탬프 내 매개 변수가 있었다 홀수 번호는

dayOne = 1; 
dayTwo = 3; 
dayThree = 2; 
dayFour = 1; 
dayFive = 1; 
daySix = 4; 
daySeven = 0; 

답변

4

당신은 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 
+0

내가 2.0을 사용했다 바랍니다. 나는 1.9를 사용하고있다. – user1325194

+0

이 문맥에서 count (1)는 무엇을 설명 할 수 있습니까? 나는 그걸 전에 그렇게 사용하는 걸 한번도 보지 못했습니다. – user1325194

+0

사실, count (1)는 여전히 아무것도 반환하지 않습니다. – user1325194

관련 문제