CREATE (a:Fighter{name:'Khabib Nurmagomedov', weight:'155'}), (b:Fighter{name:'Rafael Dos Anjos', weight:'155'}), (c:Fighter{name:'Neil Magny', weight:'170'}), (d:Fighter{name:'Jon Jones', weight:'205'}), (e:Fighter{name:'Daniel Cormier', weight:'205'}), (f:Fighter{name:'Michael Bisping', weight:'185'}), (g:Fighter{name:'Matt Hamill', weight:'185'}), (h:Fighter{name:'Brandon Vera', weight:'205'}), (i:Fighter{name:'Frank Mir', weight:'230'}), (j:Fighter{name:'Brock Lesnar', weight:'230'}), (k:Fighter{name:'Kelvin Gastelum', weight:'185'}), (a)-[:beats]->(b), (b)-[:beats]->(c), (d)-[:beats]->(e), (f)-[:beats]->(g), (d)-[:beats]->(h), (h)-[:beats]->(i), (i)-[:beats]->(j), (c)-[:beats]->(k), (k)-[:beats]->(f), (k)-[:beats]->(f), (f)-[:beats]->(g), (f)-[:beats]->(k), (g)-[:beats]->(d) # visualize MATCH (a: Fighter)-[r]-(b) RETURN r, a, b; # middle/welter/light MATCH (a: Fighter)-[:beats]->() WHERE a.weight = '155' OR a.weight = '170' OR a.weight = '185' RETURN a.weight, collect(DISTINCT a.name) # 1-1 MATCH (a: Fighter)-[r1:beats]->(b: Fighter)-[r2:beats]->(c: Fighter) WITH a, b, c, count(*) AS cnt WHERE a = c AND cnt = 1 RETURN a, b; # gretest number of fights MATCH (a: Fighter)-[r:beats]->() WITH a.name as name, count(a.name) as cnt CALL { MATCH (a: Fighter)-[r:beats]->() WITH a.name as name, count(a.name) as cnt RETURN max(cnt) as mx } WITH name, cnt, mx WHERE cnt = mx RETURN name # Undefeated MATCH (a: Fighter) WHERE NOT EXISTS (()-[:beats]->(a)) RETURN a # defeated MATCH (a: Fighter) WHERE NOT EXISTS ((a)-[:beats]->()) RETURN a