2

我想按范围计算密码查询的结果。

这是一个例子:假设我有一个出版年份的书籍列表,我希望能够计算在 1970 年和 1979 年、1980 年和 1989 年之间出版的与我的密码查询匹配的书籍数量,..., 2010 年和 2019 年

4

2 回答 2

3

如果您想在一个查询中完成所有操作,我会这样做:

MATCH (b:Book)
RETURN SUM(CASE WHEN 1970 <= b.published < 1980 THEN 1 ELSE 0 END) AS `70s`,
       SUM(CASE WHEN 1980 <= b.published < 1990 THEN 1 ELSE 0 END) AS `80s`,
       SUM(CASE WHEN 1990 <= b.published < 2000 THEN 1 ELSE 0 END) AS `90s`,
       SUM(CASE WHEN 2000 <= b.published < 2010 THEN 1 ELSE 0 END) AS `00s`,
       SUM(CASE WHEN 2010 <= b.published < 2020 THEN 1 ELSE 0 END) AS `10s`

尽管我认为这不会利用b.published. 这种类型的范围查询也仅适用于 Neo4j 2.3。

于 2015-11-13T20:20:11.213 回答
0

如果您published_year在节点上有一个属性Book,那么查询将如下所示:

MATCH (b:Book) 
WHERE b.published_year > 1969 AND b.published_year < 1980
WITH count(b) AS num
RETURN num;

几点注意事项

  1. 确保published_year属性是整数 -toInt()创建属性时使用 Cypher 函数。
  2. 在 Neo4j 2.3+ 中,索引可以支持这些类型的范围查询。在属性上创建索引published_year以提高查找效率:CREATE INDEX ON :Book(published_year)有关索引的更多信息here
于 2015-11-13T20:13:23.000 回答