'neo4j how to use where conditionally

I have the following query:

MATCH (u: User {id: '...'})-[r:EXECUTING]->(journey: Journey)
WHERE r.progress > 0 AND r.progress < 100
RETURN journey;

It loads all journeys that are attached to a user with :EXECUTING if the relationship's progress property is between 1 and 100.

Now I want to add a condition for the part behind the AND --> so the WHERE should only be r.progress > 0 (without the AND ...). I saw that there are CASE/WHEN/THEN but think that there must be a quicker solution?

Example "The where should check r.progress to be between 0 and 50 if a certain variable is false. If the variable is true, it should check r.progress to be between 0 and 100"

Thanks in advance!



Solution 1:[1]

Based on your description

Example "The where should check r.progress to be between 0 and 50 if a certain variable is false. If the variable is true, it should check r.progress to be between 0 and 100"

I'd write the following WHERE clause:

WHERE (
     (variable = FALSE AND (r.progress > 0 AND r.progress < 50 ))
     OR
     (variable = TRUE AND (r.progress > 0 AND r.progress < 100 ))
)

But not sure it is "quicker" than a CASE/WHEN.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 stellasia