2016-08-08 5 views
0

У меня есть следующие запросы:Neo4j/Cypher - Несколько ИНЕКЕ не возвращают результаты

Это один возвращает ожидаемые результаты:

MATCH (u:User)-[pw_rel:PAYED_WITH]->(ext_acc:ExtAccount) 
WITH u, pw_rel, ext_acc, COUNT(DISTINCT ext_acc) as accs 
WHERE pw_rel.processed_at > 0 AND accs > 2 
RETURN u 
:

MATCH (u:User)-[pw_rel:PAYED_WITH]->(ext_acc:ExtAccount) 
WHERE pw_rel.processed_at > 0 
WITH u, COUNT(DISTINCT ext_acc) as accs 
WHERE accs > 2 
RETURN u 

Хотя это один ничего не возвращает

Почему? Что мне не хватает?

ответ

1

Это связано с агрегацией и тем, что она означает в контексте других столбцов. То есть другие столбцы без агрегации действуют как ключ группировки.

В вашем первом запросе ваш единственный групповой ключ - u. Это означает, что ваш вывод - это счет всех учетных записей ext для каждого пользователя.

В вашем втором запросе ваш ключ группировки включает u, pw_rel, ext_acc. Таким образом, он возвращает количество всех учетных записей ext для каждой комбинации user/pw-rel/ext_acc (или строки). Это не очень полезно, так как вы, вероятно, вернете счет по одному в каждой строке, поэтому нет строк, которые передадут ваше предложение WHERE для счетчика> 2. Даже если вы удалили столбец ext_acc в своем WITH, Столбец pw-rel все равно будет ограничивать вас числом в 1 (поскольку для пользователя/pw_rel только один файл ext_acc).

Должно быть легко увидеть, что другие столбцы изменяют то, что объединяют функции агрегата, и столбцы, которые вы получите.

Количество (ext_acc) - Общее кол-во всех внутр счетов

и, COUNT (ext_acc) - пользователей, и подсчет внутр счетов для каждого пользователя

и, pw_rel, COUNT (ext_acc) - Пользователи, оплаченные отношения и количество всех внешних учетных записей на одного пользователя и оплаченные с помощью этого пользователя

u, pw_rel, ext_acc, count (ext_acc) - Пользователи, оплачиваемые отношениями, учетными записями пользователей и подсчет всех внешних учетных записей на одного пользователя и оплаченный - с отношением от этого пользователя к определенной учетной записи пользователя.

+0

Спасибо за объяснение! – lxngxr

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