The CASE expression is a conditional expression that allows you to evaluate one or more conditions and return different results based on those conditions.
<case expression> ::= <simple case> | <searched case>
GQL supports two forms of the CASE expression:
Example Graph
The following examples run against this graph:

To create this graph, run the following query against an empty graph:
INSERT (p1:Paper {_id:'P1', title:'Efficient Graph Search', score:6, author:'Alex', publisher:'PulsePress'}),
(p2:Paper {_id:'P2', title:'Optimizing Queries', score:9, author:'Alex'}),
(p3:Paper {_id:'P3', title:'Path Patterns', score:7, author:'Zack', publisher:'BrightLeaf'}),
(p1)-[:Cites {weight:2}]->(p2),
(p2)-[:Cites {weight:1}]->(p3)
Simple CASE
The simple CASE expression evaluates a single value against multiple possible values, returning the result associated with the first matching value.
<simple case> ::=
"CASE" <case operand>
"WHEN" <when operand list> "THEN" <result>
[ { "WHEN" <when operand list> "THEN" <result> }... ]
[ "ELSE" <result> ]
"END"
<when operand list> ::= <when operand> [ { "," <when operand> }... ]
Details
<case operand>is an expression such as a variable reference, an aggregate function, etc.- Execution Flow:
- The
<case operand>is compared sequentially against each<when operand list>. - If a
<when operand list>matches<case operand>, the corresponding<result>is returned. - If no matches are found, returns the
<result>specified by theELSEclause. IfELSEis omitted,nullis returned by default.
- The
- When the
<when operand list>contains multiple<when operand>s, if any<when operand>evaluates to true, the<when operand list>is considered true. - The
<when operand>can explicitly include operators such as=,<>,>,<,>=,<=,IS NULL,IS NOT NULL, etc. The=is implicitly used when no operator but only a constant is specified.
MATCH (n:Paper WHERE n.score > 6)
RETURN CASE count(n) WHEN 3 THEN "Y" ELSE "N" END AS result
Result:
| result |
|---|
| N |
MATCH (n:Paper)
RETURN n.title, n.score,
CASE n.score
WHEN <7 THEN "Low"
WHEN 7,8 THEN "Medium"
ELSE "High" END AS scoreLevel
Result:
| n.title | n.socre | scoreLevel |
|---|---|---|
| Efficient Graph Search | 6 | Low |
| Optimizing Queries | 9 | High |
| Path Patterns | 7 | Medium |
MATCH (n:Paper)
RETURN n.title,
CASE n.publisher
WHEN IS NULL THEN "Unknown"
ELSE n.publisher END AS Publisher
Result:
| n.title | Publisher |
|---|---|
| Efficient Graph Search | PulsePress |
| Optimizing Queries | Unknown |
| Path Patterns | BrightLeaf |
Searched CASE
The searched CASE expression evaluates multiple conditions, returning the result associated with the first condition that evaluates to true.
<searched case> ::=
"CASE"
"WHEN" <condition> "THEN" <result>
[ { "WHEN" <condition> "THEN" <result> }... ]
[ "ELSE" <result> ]
"END"
Details
- The
<condition>is a boolean value expression that evaluates to true or false. - Execution Flow:
- The
<condition>s are evaluated sequentially. - When a
<condition>evaluates to true, the corresponding<result>is returned immediately. - If no
<condition>s are true, returns the<result>specified by theELSEclause. IfELSEis omitted,nullis returned by default.
- The
MATCH (n:Paper)
RETURN n.title,
CASE
WHEN n.publisher IS NULL THEN "Publisher N/A"
WHEN n.score < 7 THEN -1
ELSE n.author
END AS note
Result:
| n.title | note |
|---|---|
| Optimizing Queries | Publisher N/A |
| Efficient Graph Search | -1 |
| Path Patterns | Zack |