Я следующий запрос в Neo4j, который использует UNION
Получить средние от результата Neo4j накидной
MATCH (u:User {userId:'1'})-[dw:DIRECTOR_WEIGHT]->(d:Person)-[:DIRECTED]->(m:Movie)
WITH m, avg(dw.weight) AS mean_dw, 0 AS mean_aw, 0 AS mean_gw
WHERE m.title = 'Bambi'
RETURN m.title, mean_dw, mean_aw, mean_gw, mean_dw + mean_aw + mean_gw AS total
UNION
MATCH (u:User {userId:'1'})-[aw:ACTOR_WEIGHT]->(a:Person)-[:ACTED_IN]->(m:Movie)
WITH m, 0 AS mean_dw, avg(aw.weight) AS mean_aw, 0 AS mean_gw
WHERE m.title = 'Bambi'
RETURN m.title, mean_dw, mean_aw, mean_gw, mean_dw + mean_aw + mean_gw AS total
UNION
MATCH (u:User {userId:'1'})-[gw:GENRE_WEIGHT]->(g:Genre)<-[:GENRE]-(m:Movie)
WITH m, 0 AS mean_dw, 0 AS mean_aw, avg(gw.weight) AS mean_gw
WHERE m.title = 'Bambi'
RETURN m.title, mean_dw, mean_aw, mean_gw, mean_dw + mean_aw + mean_gw AS total
получают следующий результат:
╒═════════╤═══════════════╤════════════════╤═════════════════╤═════════════════╕
│"m.title"│"mean_dw" │"mean_aw" │"mean_gw" │"total" │
╞═════════╪═══════════════╪════════════════╪═════════════════╪═════════════════╡
│"Bambi" │7.2916666666667│"0" │"0" │7.2916666666667 │
├─────────┼───────────────┼────────────────┼─────────────────┼─────────────────┤
│"Bambi" │"0" │0.45322110715442│"0" │0.45322110715442 │
├─────────┼───────────────┼────────────────┼─────────────────┼─────────────────┤
│"Bambi" │"0" │"0" │9.289617486338933│9.289617486338933│
└─────────┴───────────────┴────────────────┴─────────────────┴─────────────────┘
Моя проблема является «всего» не делает что я намереваюсь сделать, так как мне нужен только один общий фильм (т. е. сумма трех ненулевых весов: 7.29 + 0.45 + 9.28), , но я не могу найти способ использовать этот возвращенный результат дальше. То есть, я хотел бы быть в состоянии сказать что-то вроде
RETURN m.title, sum(total)
или
RETURN m.title, mean_dw + mean_aw + mean_gw
после получения союза mean_dw
, mean_aw
и mean_gw
соответственно
спасибо. Вторая версия работает; первая версия дает другой (и неправильный) результат, хотя я не могу понять, почему из кода. Есть идеи? –
Нет идей, по образцам данных оба запроса возвращают мне одинаковые результаты. Для первого запроса вы можете захотеть «ВОЗВРАТИТЬ значение», чтобы увидеть каждое из средств до их суммирования, и посмотреть, соответствует ли это ожидаемым. – InverseFalcon