条件表达式CASE
可用来判断单个或多个条件,并根据这些条件返回不同的结果。
<case expression> ::= <simple case> | <searched case>
GQL支持CASE
表达式的两种形式:
示例图集
以下示例根据该图集运行:
在空图集中运行以下语句创建示例图集:
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
Simple CASE
表达式用来判断单个值与多个条件是否匹配,并返回首个匹配的结果。
<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> }... ]
详情
<case operand>
是不被括号包裹的表达式,如变量引用,聚合函数等。- 执行流程:
<case operand>
依次与每个<when operand list>
进行比较。<when operand list>
与<case operand>
匹配时,将返回对应的<result>
。- 若无匹配结果,则返回
ELSE
从句指定的<result>
。若省略ELSE
,则默认返回null
。
- 当
<when operand list>
包含多个<when operand>
时,若任意<when operand>
判断为真,则<when operand list>
认定为真。 <when operand>
可显式包括=
、<>
、>
、<
、>=
、<=
、IS NULL
、IS NOT NULL
等运算符。若仅指定一个常数且不包含其他运算符时,则隐式使用运算符=
。
MATCH (n:Paper WHERE n.score > 6)
RETURN CASE count(n) WHEN 3 THEN "Y" ELSE "N" END AS 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
结果:
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
结果:
n.title | Publisher |
---|---|
Efficient Graph Search | PulsePress |
Optimizing Queries | Unknown |
Path Patterns | BrightLeaf |
Searched CASE
Searched CASE
表达式用来判断多个条件,并返回首个条件判断为真的结果。
<searched case> ::=
"CASE"
"WHEN" <condition> "THEN" <result>
[ { "WHEN" <condition> "THEN" <result> }... ]
[ "ELSE" <result> ]
"END"
详情
<condition>
为布尔值表达式,计算结果为真或假。- 执行流程:
- 依次判断各
<condition>
。 - 若
<condition>
为真,则立刻返回对应的<result>
。 - 若所有
<condition>
为假,则返回ELSE
从句指定的<result>
。若省略ELSE
,则默认返回null
。
- 依次判断各
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
结果:
n.title | note |
---|---|
Optimizing Queries | Publisher N/A |
Efficient Graph Search | -1 |
Path Patterns | Zack |