2015-11-13 1 views
2

Je voudrais compter les résultats de ma requête de chiffrement par plage.Comptage des résultats d'une requête chiffrée par plage

Voici un exemple: disons que j'ai une liste de livres avec l'année de publication, j'aimerais pouvoir compter le nombre de livres correspondant à ma requête chiffrée publiée entre 1970 et 1979, 1980 et 1989, ..., 2010 et 2019

Répondre

3

Si vous voulez le faire en une seule requête que je le ferais comme ceci:

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` 

Bien que Je ne pense pas que cela tirerait avantage des index sur b.published. Ce type de requête de plage ne fonctionne que sur Neo4j 2.3.

0

Si vous avez une propriété published_year sur Book nœuds, la requête ressemblerait à quelque chose comme ceci:

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

quelques notes

  1. Assurez-vous que la propriété published_year est un nombre entier - utilisez la fonction Cypher toInt() lors de la création de la propriété.
  2. Dans Neo4j 2.3+, ces types de requêtes de plage peuvent être pris en charge par un index. Créer un index sur la propriété published_year pour améliorer l'efficacité de recherche: CREATE INDEX ON :Book(published_year) Plus d'informations sur les index here