2015-11-13 5 views
2

Хотелось бы подсчитать результаты моего запроса cypher по диапазону.Подсчет результатов запроса cypher по диапазону

Вот пример: допустим, у меня есть список книг с годом публикации, я хотел бы иметь возможность подсчитать количество книг, соответствующих моему шифрному запросу, опубликованному между 1970 и 1979, 1980 и 1989 годами, ..., 2010 и 2019

ответ

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.

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

 Смежные вопросы

  • Нет связанных вопросов^_^