cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.

how can I fuse two queries cypher to count nodes and edges

Hi all,

With these schema:

image.png

I need to fuse these 2 queries, because in the first approach there is no direct edges, and at the end I have to insert the red edges.

The first cypher, count the nodes between Jobs and Candidates and return a list order by cnt desc

match (a:Job)-[]->(req)
with a.jobId as jobID, collect(ID(req)) as rq1
match (c:Candidate)-[]->(req2)
with jobID, rq1, c.candidateId as cndID, collect(ID(req2)) as crq1
with jobID, cndID, apoc.coll.intersection(rq1, crq1) as cmn
with jobID, cndID, cmn, size(cmn) as cnt
return jobID, cndID, cmn, cnt order by cnt desc

 The second query get the pair job-candidate with the best number of edges

MATCH (a:Candidate)-[r]-(b:Job)
WITH a, b, COUNT(r) as relCount
ORDER BY relCount DESC
RETURN a.name, b.jobId, relCount order by relCount desc

Now I want to get a query that fuse the two things.
Thank you

1 ACCEPTED SOLUTION

ameyasoft
Graph Maven
Try this:
match (a:Job)-[]->(req)
with a.jobId as jobID, collect(ID(req)) as rq1
match (c:Candidate)-[]->(req2)
where ID(req2) in rq1
with jobID, rq1, c.candidateId as cndID, collect(ID(req2)) as crq1

match (b:Job)-[r]->(d:Candidate)
where b.jobId = jobID and d.candidateId = cndID
with jobID, rq1, cndID, (crq1 + count(r)) as totMatch 

View solution in original post

1 REPLY 1

ameyasoft
Graph Maven
Try this:
match (a:Job)-[]->(req)
with a.jobId as jobID, collect(ID(req)) as rq1
match (c:Candidate)-[]->(req2)
where ID(req2) in rq1
with jobID, rq1, c.candidateId as cndID, collect(ID(req2)) as crq1

match (b:Job)-[r]->(d:Candidate)
where b.jobId = jobID and d.candidateId = cndID
with jobID, rq1, cndID, (crq1 + count(r)) as totMatch