Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/filter/ Documentation version: v5.3.2 # FILTER `FILTER`语句用于选择前一个语句生成的数据集的子集。`FILTER`语句的参数是一个布尔表达式,该表达式用于确定是否将数据传递到下一个语句。 ## 语法 语法图源码 filter_statement ```` filter_statement ::= 'FILTER' 'WHERE'? search_condition ```` ## 参数 ### `search_condition` 从上一个语句中提取子数据集的布尔值表达式。有关更多信息,请参见 [WHERE 子句](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/clauses/where/)。 如果子数据集满足表达式结果,它将被传递到下一个语句。否则,它将被丢弃。 ## 示例 以下示例基于[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。 ### 使用 WHERE 子句进行过滤 ```` FOR i IN LIST[1, 2, 3] FILTER WHERE i > 2 RETURN i ```` 返回: ```` +---+ | i | +---+ | 3 | +---+ ```` ### 不使用 WHERE 子句进行过滤 ```` FOR i IN LIST[1, 2, 3] FILTER i > 2 RETURN i ```` 返回: ```` +---+ | i | +---+ | 3 | +---+ ```` ### 过滤 MATCH 语句的结果 ```` ''' USE movie MATCH (v:Person) FILTER v.birthDate > date("1990-01-20") RETURN v ORDER BY v.birthDate LIMIT 3 ''' ```` 返回: ```` +-------------------------------------------------------------------------------------+ | v | +-------------------------------------------------------------------------------------+ | (288334086727008257@Actor:Person{birthDate:1990-01-30,id:9641,name:"Jake Thomas"}) | | (288374798722007041@Actor:Person{birthDate:1990-04-15,id:10990,name:"Emma Watson"}) | | (288488795743977473@Actor:Person{birthDate:1990-07-04,id:5847,name:"David Kross"}) | +-------------------------------------------------------------------------------------+ ```` ### 过滤过程调用的结果 ```` ''' CALL show_graphs() YIELD name FILTER name = "movie" RETURN * ''' ```` 返回: ```` +-------+ | name | +-------+ | movie | +-------+ ```` ### 聚合操作之前的过滤 ```` ''' USE movie MATCH (v@Actor) FILTER v.birthDate > date("1995-01-20") RETURN count(v) AS count GROUP BY () ''' ```` 上述语句过滤出出生日期晚于 1995 年 1 月 20 日的演员,并统计这些演员的数量。 返回: ```` +-------+ | count | +-------+ | 3 | +-------+ ```` ### 聚合操作之后的过滤 由于聚合表达式通常在`RETURN`语句中使用,如果要在聚合操作之后执行过滤操作,必须使用关键字`NEXT`将结果传递到下一个语句。更多信息,请参见[语句块](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/statement-block/)。 ```` ''' USE movie MATCH (v@Actor) RETURN count(v) AS count, v.birthDate AS birthDate GROUP BY birthDate NEXT USE movie FILTER birthDate > date("1995-01-20") RETURN count, birthDate ''' ```` 上述语句首先统计每个出生日期的演员数量,然后过滤出出生日期晚于 1995 年 1 月 20 日的记录。 返回: ```` +-------+------------+ | count | birthDate | +-------+------------+ | 1 | 1997-07-17 | | 1 | 1997-03-09 | | 1 | 1998-01-12 | +-------+------------+ ````