Skip to content

Instantly share code, notes, and snippets.

@oliverfoggin
Last active August 29, 2015 13:57
Show Gist options
  • Save oliverfoggin/9561224 to your computer and use it in GitHub Desktop.
Save oliverfoggin/9561224 to your computer and use it in GitHub Desktop.
MRDWC Neo4j gist

MRDWC Neo4j gist

I’ve been watching the Men’s Roller Derby World Cup today so thought I’d get some info out of what’s going on.

Still ne to Neo4j so still learning and playing around with it to see what I can do with it.

Node Types

  • (Group {name:""})

  • (Team {name:""})

  • (Game {day:1, time:1000})

Relations

  • (Team)-[:IS_IN]→(Group)

  • (Team)-[:PLAYED_IN {score:0}]→(Game)

    • I think this probably needs to change

create (red:Group {name:"Red"}),
(orange:Group {name:"Orange"}),
(green:Group {name:"Green"}),
(blue:Group {name:"Blue"}),
(finland:Team {name:"Team Finland MRD"})-[:IS_IN]->(red),
(usa:Team {name:"USA Roller Derby – Men’s Team"})-[:IS_IN]->(red),
(wales:Team {name:"Team Wales Men’s Roller Derby"})-[:IS_IN]->(red),
(belgium:Team {name:"Belgium"})-[:IS_IN]->(orange),
(canada:Team {name:"Canada"})-[:IS_IN]->(orange),
(japan:Team {name:"Ninjapan"})-[:IS_IN]->(orange),
(scotland:Team {name:"Team Scotland Men’s Roller Derby"})-[:IS_IN]->(orange),
(argentina:Team {name:"Argentina"})-[:IS_IN]->(green),
(england:Team {name:"Team England Men’s Roller Derby"})-[:IS_IN]->(green),
(netherlands:Team {name:"Team Netherlands Men’s Derby"})-[:IS_IN]->(green),
(sweden:Team {name:"Sweden"})-[:IS_IN]->(green),
(australia:Team {name:"Team Australia-Wizards of Aus"})-[:IS_IN]->(blue),
(france:Team {name:"France"})-[:IS_IN]->(blue),
(germany:Team {name:"Team Germany"})-[:IS_IN]->(blue),
(ireland:Team {name:"Team Ireland"})-[:IS_IN]->(blue),
(argentina)-[:PLAYED_IN {score:51}]->(:Game {day:1, time:1000})<-[:PLAYED_IN {score:158}]-(england),
(belgium)-[:PLAYED_IN {score:20}]->(:Game {day:1, time:1030})<-[:PLAYED_IN {score:255}]-(canada),
(ireland)-[:PLAYED_IN {score:30}]->(:Game {day:1, time:1100})<-[:PLAYED_IN {score:145}]-(france),
(finland)-[:PLAYED_IN {score:0}]->(:Game {day:1, time:1130})<-[:PLAYED_IN {score:314}]-(usa),
(sweden)-[:PLAYED_IN {score:72}]->(:Game {day:1, time:1200})<-[:PLAYED_IN {score:101}]-(netherlands),
(japan)-[:PLAYED_IN {score:73}]->(:Game {day:1, time:1230})<-[:PLAYED_IN {score:247}]-(scotland),
(germany)-[:PLAYED_IN {score:12}]->(:Game {day:1, time:1300})<-[:PLAYED_IN {score:232}]-(australia),
(sweden)-[:PLAYED_IN {score:59}]->(:Game {day:1, time:1330})<-[:PLAYED_IN {score:176}]-(argentina),
(belgium)-[:PLAYED_IN {score:82}]->(:Game {day:1, time:1400})<-[:PLAYED_IN {score:98}]-(scotland),
(germany)-[:PLAYED_IN {score:14}]->(:Game {day:1, time:1430})<-[:PLAYED_IN {score:251}]-(france),
(usa)-[:PLAYED_IN {score:217}]->(:Game {day:1, time:1500})<-[:PLAYED_IN {score:13}]-(wales),
(england)-[:PLAYED_IN {score:345}]->(:Game {day:1, time:1530})<-[:PLAYED_IN {score:22}]-(netherlands),
(japan)-[:PLAYED_IN {score:11}]->(:Game {day:1, time:1600})<-[:PLAYED_IN {score:349}]-(canada),
(ireland)-[:PLAYED_IN {score:65}]->(:Game {day:1, time:1630})<-[:PLAYED_IN {score:111}]-(australia),
(england)-[:PLAYED_IN {score:363}]->(:Game {day:1, time:1700})<-[:PLAYED_IN {score:0}]-(sweden),
(canada)-[:PLAYED_IN {score:220}]->(:Game {day:1, time:1730})<-[:PLAYED_IN {score:18}]-(scotland),
(ireland)-[:PLAYED_IN {score:62}]->(:Game {day:1, time:1800})<-[:PLAYED_IN {score:22}]-(germany),
(japan)-[:PLAYED_IN {score:88}]->(:Game {day:1, time:1830})<-[:PLAYED_IN {score:241}]-(belgium),
(australia)-[:PLAYED_IN {score:57}]->(:Game {day:1, time:1900})<-[:PLAYED_IN {score:117}]-(france),
(wales)-[:PLAYED_IN {score:107}]->(:Game {day:1, time:1930})<-[:PLAYED_IN {score:35}]-(finland),
(netherlands)-[:PLAYED_IN {score:35}]->(:Game {day:1, time:2000})<-[:PLAYED_IN {score:105}]-(argentina)

So…​ what have the results been like so far?

MATCH (t1:Team)-[p1:PLAYED_IN]->(game:Game)<-[p2:PLAYED_IN]-(t2:Team)
WHERE id(t1)<id(t2)
RETURN t1.name AS Team1, p1.score AS Score1, game.time AS Time, p2.score AS Score2, t2.name AS Team2
ORDER BY Time

Which were the closest games?

MATCH (t1:Team)-[p1:PLAYED_IN]->(Game)<-[p2:PLAYED_IN]-(t2:Team)
WHERE id(t1)<id(t2)
RETURN t1.name AS Team1, p1.score AS Score1, p2.score AS Score2, t2.name AS Team2, sqrt((p1.score - p2.score)*(p1.score - p2.score)) AS `Point Differential`
ORDER BY `Point Differential`

Cool…​ so who’s on top when it comes to the points?

MATCH (t1:Team)-[p1:PLAYED_IN]->(game:Game)<-[p2:PLAYED_IN]-(t2:Team)
WHERE id(t1)<id(t2) AND game.day = 1
RETURN t1.name AS Team1, SUM(p1.score - p2.score) AS `Point Differential`
ORDER BY `Point Differential` DESC

Break it down by group

Now don’t have me break this thing down for nothing!

MATCH (group:Group)<--(t1:Team)-[p1:PLAYED_IN]->(game:Game)<-[p2:PLAYED_IN]-(t2:Team)
WHERE id(t1)<id(t2) AND game.day = 1
RETURN group.name AS `Group Name`, t1.name AS Team1, SUM(p1.score - p2.score) AS `Point Differential`
ORDER BY `Group Name`, `Point Differential` DESC

So which group has had the most points?

MATCH (group:Group)<-[:IS_IN]-(team1:Team)-[p1:PLAYED_IN]->()
RETURN group.name AS `Group Name`, SUM(p1.score) AS `Total Points Scored`
ORDER BY `Total Points Scored` DESC

Well, as you can see it’s just a bit of fun for now :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment