Я в тупике, но я уверен, что мне не хватает чего-то очевидного. Короче говоря, я понятия не имею, почему мой запрос возвращает 2x значения, которые я ожидал бы.Cypher Возвращающиеся повторяющиеся данные
На скриншоте ниже показан запрос, результаты запроса под ним, а также некоторые базовые данные (нижний результирующий набор), которые точны.
Например, команда B
действительно играл в 4 играх, и было 10 очков, но второй запрос в верхней части возвращается 2x.
Чтобы следовать вместе, вот моя игрушка база:
// add constraint
CREATE CONSTRAINT ON (n:Team) ASSERT n.id IS UNIQUE;
// load the teams
LOAD CSV WITH HEADERS FROM "https://docs.google.com/spreadsheets/d/1QwXJE2qWVsejWeJGOouYxblNTox_Z9Ly5TWggzQNQVY/pub?gid=0&single=true&output=csv" AS row
WITH row
MERGE (t:Team {id:row.id, name:row.name});
// load the games
LOAD CSV WITH HEADERS FROM "https://docs.google.com/spreadsheets/d/1QwXJE2qWVsejWeJGOouYxblNTox_Z9Ly5TWggzQNQVY/pub?gid=33501648&single=true&output=csv" AS row
WITH row
CREATE (g:Game)
MERGE (h:Team {id:row.hometeam})
MERGE (a:Team {id:row.awayteam})
MERGE (a)-[:AWAY_TEAM {score:row.awayscore}]->(g)
MERGE (h)-[:HOME_TEAM {score:row.homescore}]->(g);
// Games played
MATCH (t:Team)-[r]->(x:Game)
RETURN t.name, count(x) as games, sum(r.score) as for
ORDER BY games DESC
// the query in question which 2x's the results
MATCH (t1:Team)-[r1]->(g1:Game)
MATCH (g1)<-[r2]-(t2:Team)
RETURN t1.name, count(r1) as games, sum(r1.score) as for, sum(r2.score) as against
ORDER BY games DESC
И ниже является именно из всего графа, где число на краю является оценка, что команда была в конкретной игре
Awesome, спасибо! – Btibert3
След. Для команды A, как я могу получить общий балл противников для игр, в которых команда A не играла в одном и том же запросе? Например, я хочу использовать 'MATCH (t1: Team) - [r1] -> (g1: Game) <- [r2] - (t2: Team) - [r3] -> (g2: Game) <- [ r4] - (t3: Team) ', но даже после ряда предложений' WHERE NOT', я столкнулся с той же проблемой. Борясь, чтобы окутать голову, почему я дважды считаю эти пути. – Btibert3
@ Btibert3 Если я правильно вас понимаю, это будет примерно так: 'MATCH (a: Team {name:" A "}) - [] -> (g: Game) <- [] - (оппонент: Team) MATCH (противник) - [r] -> (g2: игра) <- [] - (t2) ГДЕ НЕ a = t2 RETURN противник, сумма (r.score) AS total_score'. Найдите всех противников команды A, найдите игры, против которых играли противники, где они не играли в Team A, а затем суммировали счет этой команды для этих игр. –