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

时间:2015-11-13 20:01:02

标签: neo4j cypher neo4j.rb

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

以下是一个例子:让我们说出一份出版年份的书籍清单,我希望能够计算出与我的密码匹配的书籍数量查询发表于1970年至1979年,1980年和1989年,......,2010年和2019年

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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属性是整数 - 在创建属性时使用Cypher toInt()函数。
  2. 在Neo4j 2.3+中,索引可以支持这些类型的范围查询。在published_year属性上创建索引以提高查找效率:CREATE INDEX ON :Book(published_year)有关索引的更多信息here