您好我想通过两个过滤器对图表结果进行排序..
我的Cypher查询看起来像这样..
{{1}}
现在如果ts> 3,我想只通过ts对final_score和rel_count ELSE srt的结果进行排序。 请修改订单..
答案 0 :(得分:1)
1)您使用分页(跳过和限制)
2)如果我理解你需要什么,那么添加“else”来排序:
UNWIND RANGE(1,100) as i
WITH i, rand()*5 as x, toInt(rand()*10) as y
RETURN i, x, y, CASE WHEN x>3 THEN 1 ELSE 0 END as for_sort
ORDER BY
CASE
WHEN for_sort=1 THEN x ELSE y END DESC,
CASE
WHEN for_sort=1 THEN y ELSE x END DESC
答案 1 :(得分:1)
这个简化的查询(使用ORDER BY
的单个参数)是否适用于您?
MATCH (u:User)-[r:like]->(s:Story)
WITH s, (s.trending_score_all*4) AS ts
RETURN DISTINCT s.story_id, ts, TOINT(s.impression_count_72)
ORDER BY (CASE WHEN ts > 3 THEN ts ELSE TOINT(s.impression_count_72) END) DESC
LIMIT 10;
[EDITED]
如果您需要按不同数量的值进行排序(具体取决于具体情况),则必须使用变通方法,因为Cypher不直接支持。
例如,假设您想要按ts DESC
然后按s.story_id ASC
订购(ts> 3)。在这种情况下,您可以将上述ORDER BY
子句更改为:
ORDER BY
(CASE WHEN ts > 3 THEN ts ELSE TOINT(s.impression_count_72) END) DESC,
(CASE WHEN ts > 3 THEN s.story_id ELSE NULL END) ASC
通过这种方式使用NULL
(或任何文字值),您可以让任何子排序有效地执行任何操作。