Получить количество нескольких свойств в neo4j - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь объединить 2 шифра в один для производительности, но не удалось.

Мне нужно получить количество уникальных для каждого свойства свойств одного и того же шифра.

EX 1:

Match (n)
RETURN n.foo, count(*) AS count

EX 2:

Match (n)
RETURN n.bar, count(*) AS count

Я надеялся, что смогу запустить оба:

Match (n)
RETURN n.foo, count(*) AS fooCount, n.bar, count(*) AS barCount

Но это возвращает одинаковое количество для обоих, поскольку оно находит, где они оба совпадают. Не то, что я хочу.

Поэтому искал способ сгруппировать их, чтобы они были уникальными, как:

Match (n)
RETURN {n.foo, count(*) AS fooCount}, {n.bar, count(*) AS barCount}

Очевидно, что это неправильный синтаксис, но показывает, что я пытаюсь сделать.

Любая помощь в этом, конечно, приветствуется.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Поскольку вы пытаетесь агрегировать отдельные результаты запроса, вы также можете использовать UNION как быстрый и простой способ вернуть оба результата одновременно.

Match (n)
RETURN "foo" as type, n.foo as value, count(*) AS count
UNION ALL
Match (n)
RETURN "bar" as type, n.bar as value, count(*) AS count

Всего несколько примечаний, оба возврата для UNION должны иметь одинаковые имена столбцов. Кроме того, столбец «type» в примере не является обязательным, но он показывает, как можно добавить заполнитель, если в вызывающих запросах нет одинакового числа возвращаемых столбцов. (Или если вы хотите указать, из какого запроса получен результат.) Если есть «foo» и «bar» с одинаковым значением + count, UNION ALL сохранит оба, а UNION отбросит дубликат (если вы удалите столбец типа).

0 голосов
/ 02 ноября 2018

Лучше всего делать это вплотную, сразу это не очень хорошая идея для такого типа запросов, так как агрегация не сработает в вашу пользу.

Вы можете попробовать это:

MATCH (n)
WITH n.bar as bar, count(*) AS count
WITH collect({bar:bar, count:count}) as barCounts
MATCH (n) 
WITH barCounts, n.foo as foo, count(*) AS count
WITH barCounts, collect({foo:foo, count:count}) as fooCounts
RETURN barCounts, fooCounts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...