Neo4j Cypher圆值

时间:2018-01-11 12:41:36

标签: neo4j cypher

我有以下Cypher:

MATCH (v:Value)-[:CONTAINS]->(hv:HistoryValue) 
WHERE v.id = {valueId} 
OPTIONAL MATCH (hv)-[:CREATED_BY]->(u:User) 
WHERE {fetchCreateUsers} 
WITH u, hv ORDER BY hv.createDate DESC 
WITH count(hv) as count, count(hv) / {maxResults} as step, COLLECT({userId: u.id, historyValueId: hv.id, historyValue: hv.originalValue, historyValueCreateDate: hv.createDate}) AS data 
RETURN REDUCE(s = [], i IN RANGE(0, count - 1, CASE step WHEN 0 THEN 1 ELSE step END) | s + data[i]) AS result, step, count

现在:

count(hv)  = 260
{maxResults} = 100

step变量等于2,但我希望round(260/100) = 3

我尝试了以下round(count(hv) / {maxResults}) as step,但step仍为2。

如何修复我的查询以获得正确的回合(在此特定情况下为3 step变量)?

2 个答案:

答案 0 :(得分:4)

在其中一个值中使用toFloat()

return round(toFloat(260) / 100)

输出:

╒═══════════════════════════╕
│"round(toFloat(260) / 100)"│
╞═══════════════════════════╡
│3                          │
└───────────────────────────┘

答案 1 :(得分:2)

您目前正在进行整数除法。如果你输入return 260/100,你将获得2,这就是得到舍入的值(虽然没有任何回合,所以你得到2

您需要使用浮点值。您可以通过让maxResults具有显式小数(100.0),或在toFloat()周围使用maxResults或计数来实现此目的。 return 260/100.0return toFloat(260)/100return 260/toFloat(100)都会产生2.6。如果您round(),您将获得预期的3值。