Исходная ситуация
Я написал рабочий запрос Cypher, который возвращает четыре различных значения.
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
RETURN
amountA, amountB, amountC, amountD;
Целевое решение
Вместо таблицы из четырех столбцовТеперь я хочу вернуть одну текстовую строку, где все четыре величины объединены, включая описательную метку.Однако количество должно быть только частью строки, если ее количество больше нуля.
╒════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞════════════════════════════════════════════════════╡
│"amountA: 123456, amountC: 9876543, amountD: 2018" │
└────────────────────────────────────────────────────┘
(Так как значение valueB равно 0, в результате оно опускается.)
Я использую этот Cyper-запрос для нескольких миллионов строк.Из-за опасений, влияющих на производительность, я не хочу создавать и вызывать пользовательский плагин.
Итак, как я могу вернуть значения в виде строки с Cypher и Neo4j?Можете ли вы дать мне совет, как решить эту проблему?Заранее большое спасибо за то, что указали мне правильное направление!
подход к проблеме / предварительный результат
Cypher:
MATCH
<complex satement>
WITH
count(DISTINCT typeA) AS amountA,
count(DISTINCT typeB) AS amountB,
count(DISTINCT typeC) AS amountC,
count(DISTINCT typeD) AS amountD
WITH
['amountA: ', amountA, ', amountB: ', amountB, ', amountC: ', amountC, ', amountD: ', amountD] AS quantities
RETURN
reduce(result = toString(head(quantities)), n IN tail(quantities) | result + n) AS formattedQuantities;
Результат:
╒═════════════════════════════════════════════════════════════════╕
│"formattedQuantities" │
╞═════════════════════════════════════════════════════════════════╡
│"amountA: 123456: 1, amountB: 0, amountC: 9876543, amountD: 2018"│
└─────────────────────────────────────────────────────────────────┘
Все еще открыто:
- фильтрация суммы B из-за значения 0