Ich habe eine Abfrage basierend auf einem Schachturnier. Es läuft gut und gibt einen Wert zurück. Ich entschuldige mich, wenn es hässlich ist, und ich weiß, dass ich es aufräumen könnte. Aber jetzt funktioniert es gut und gibt den Wert 0,5 zurück.Die Verwendung von SET mit berechneten Werten in Neo4j erzeugt einen "nicht definierten" Fehler
Um schnell einen Kontext zu geben, betrachtet die Abfrage die Gegner von Gegnern und aggregiert die Datensätze des Spielers des 2. Grades 'und erstellt dann ein Ranking.
MATCH (n)-[:HAS_RECORD]-(m)-[:PLAYED]-(a)-[:PLAYED]-(b)-[:HAS_RECORD]-(c)-[:HAS_RECORD]-(d)-[:PLAYED]-(e)-[:PLAYED]-(f)-[:HAS_RECORD]-(g)
WHERE n.player_id = '1'
WITH e, f,
CASE WHEN e.player_wins='1' THEN 1 ELSE 0 END AS wins_count
RETURN (toFloat(sum(win_count))/toFloat(count(e))) * (sum(toInt(f.wins))/(sum(toInt(f.wins)) + sum(toInt(f.losses)) +sum(toInt(f.draws)))) AS rank
Das möchte ich wieder auf den Spieler berechnet SET
in Knoten e
dargestellt Ranking. Aber ich kann es nicht tun.
Ich versuchte dies, aber es hat nicht funktioniert ... ich eine Fehlermeldung anzeigt, wins_count not defined
:
MATCH (n)-[:HAS_RECORD]-(m)-[:PLAYED]-(a)-[:PLAYED]-(b)-[:HAS_RECORD]-(c)-[:HAS_RECORD]-(d)-[:PLAYED]-(e)-[:PLAYED]-(f)-[:HAS_RECORD]-(g)
WHERE n.player_id = '0'
WITH e, f,
CASE WHEN e.player_wins='1' THEN 1 ELSE 0 END AS wins_count,
(toFloat(sum(wins_count))/toFloat(count(e))) * (sum(toInt(f.wins))/(sum(toInt(f.wins)) + sum(toInt(f.losses)) +sum(toInt(f.draws)))) AS rank
SET e.rank = rank
RETURN e
Ich weiß nicht, wie ich sonst rank
ohne setzen es nach dem CASE
berechnen kann.
Ich dachte, da gibt es ein Problem mit wins_count
nicht definiert ist, vielleicht muß ich Dinge durchsetzen, so dass ich versuchte, ein anderes zu setzen WITH
nach den CASE
, aber dann scheiterte es ... ich irgendwie eine Tabelle der Reihen erzeugt !!
Dann habe ich versucht, den Teil, der den Rang berechnet direkt in die SET
-Anweisung zu verschieben, aber anscheinend können Sie Aggregation in einer SET
-Anweisung nicht tun !!
Wieder entschuldige ich mich für den hässlichen Code und stelle fest, dass ich kein minimales Beispiel geliefert habe. Aber ich hoffe, da das Problem syntaktischer Natur ist, wird dies jemandem klar sein, der weiß, was falsch ist. Vielen Dank.