2013-08-31 5 views
3

Извинения за вероятность повторения этого вопроса, но я просмотрел уже заданные вопросы и не смог найти тот, который связан с моей проблемой, или не мог понять КАК они относятся к моей проблеме. Я тоже неофит-шифр, так что это тоже очень простой вопрос.Cypher: Невозможно получить количество сгруппированных узлов из подключенных узлов

Я пытаюсь определить имя каждого контейнера, общее количество контейнеров и количество элементов в каждом контейнере, чтобы я мог генерировать круговой график, представляющий распределение предметов между контейнерами. Запросы, которые я создал до сих пор, дают мне истинное количество элементов, но либо дают мне счет 1 для контейнеров (например, запрос ниже), либо возвращают количество контейнеров с тем же значением, что и количество элементов.

START c=node:internal_auto_index(TYPE = 'CONTAINERS') 
WITH c, COUNT(c.name) as containerCount 
MATCH i-[INSTANCE__CONTAINERS]->c 
RETURN c.name as containerName, containerCount, COUNT(i) as items, (COUNT(i)/containerCount) as percentage 
ORDER BY c.name 

Что я делаю неправильно? Спасибо заранее за ваше время.

Приветствия,

Jon

ответ

3

Результат первого запроса имеет два выражения. Первое выражение c служит в качестве ключа группы, к которой применяется функция агрегирования count() второго выражения. Поскольку каждый c представляет собой группу одного контейнера, функция агрегации счет будет, конечно, оценена как 1, а не общее количество контейнеров.

Самый простой способ исправить это просто возвращает количество контейнера в первом запросе и отнес его вперед на второй запрос,

START c=node:internal_auto_index(TYPE = 'CONTAINERS') 
WITH COUNT(*) as containerCount 
START c=node:internal_auto_index(TYPE = 'CONTAINERS') 
MATCH i-[INSTANCE__CONTAINERS]->c 
RETURN c.name as containerName, containerCount, COUNT(i) as items, (COUNT(i)/containerCount) as percentage 
ORDER BY c.name 

Я знаю, это выглядит немного излишним, но я не Не думаю, что есть способ вернуть каждый контейнер и общее количество контейнеров в одной строке в качестве результата запроса.

+0

Удивительно, спасибо большое! –

+1

Я действительно смог внести дальнейшие корректировки в запрос, применив ту же технику к общему количеству элементов, таким образом: START i = node: internal_auto_index (TYPE = 'ITEMS') С COUNT (*) как totalItems START c = узел: internal_auto_index ('КОНТЕЙНЕРОВ' TYPE =) С COUNT (*) в качестве totalContainers, TotalItems СНВ с = узла: internal_auto_index ('КОНТЕЙНЕРОВ' TYPE =) СПИЧКА I- [INSTANCE__CONTAINERS] -> с ВОЗВРАТ c.name, как containerName, totalContainers, COUNT (i) как containerItems, totalItems ORDER BY c.name –

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