新手和我有一张图表,其中“员工”在“零售商”工作,“客户”在“零售商”购物。客户进行的某些交易存在“争议”。我正在尝试找出与超过 1 家零售商合作的员工名单,其中交易已被标记为“有争议”
这是我写的内容,它给了我很好的结果,但也包含在 1 家商店工作的所有员工。 我想过滤掉在 1 家商店工作的员工。
MATCH (employees:Employee)-[worklocation:WORKS_AT]->(retailer:Retailer)
WITH employees, retailer, COUNT(DISTINCT worklocation) AS Count_Worklocations
WHERE (retailer)<-[:SHOPPED_AT {status : "Disputed"}]-(:Customer)
RETURN employees.name, sum(Count_Worklocations) AS WORKPLACES
order by WORKPLACES DESC
结果:
╒═════════════════╤══════════╕
│employees.name │WORKPLACES│
╞═════════════════╪══════════╡
│"Irvin Clayton" │3 │
├─────────────────┼──────────┤
│"Ricky Bond" │2 │
├─────────────────┼──────────┤
│"Carmen Dixon" │2 │
├─────────────────┼──────────┤
│"Bryon Ramos" │2 │
├─────────────────┼──────────┤
│"Seth Snow" │1 │
├─────────────────┼──────────┤
│"Donny Pollard" │1 │
├─────────────────┼──────────┤
│"Isaac Mendez" │1 │
├─────────────────┼──────────┤
│"Sonny Horn" │1 │
├─────────────────┼──────────┤
│"Roxie Aguilar" │1 │
├─────────────────┼──────────┤
│"Letha Hardy" │1 │
├─────────────────┼──────────┤
│"Don Howe" │1 │
├─────────────────┼──────────┤
│"Kelvin Haney" │1 │
├─────────────────┼──────────┤
│"Denver Glover" │1 │
├─────────────────┼──────────┤
│"Steven Carney" │1 │
├─────────────────┼──────────┤
│"Kraig Hensley" │1 │
├─────────────────┼──────────┤
│"Andrea Gallegos"│1 │
├─────────────────┼──────────┤
│"Lina Rivers" │1 │
├─────────────────┼──────────┤
│"Deidre Duke" │1 │
├─────────────────┼──────────┤
│"Jerold Mccarthy"│1 │
├─────────────────┼──────────┤
│"Malik Copeland" │1 │
└─────────────────┴──────────┘
MATCH(员工:员工)-[员工:WORKS_AT]->(零售商) 使用员工.name AS
Employee Name
,收集(不同的零售商.名称)AS Retailer Name
,计数(零售商.名称)作为cnt
其中cnt>1
MATCH (员工:员工)-[员工:WORKS_AT]->(零售商),(客户:客户)- [交易:SHOPPED_AT]->(零售商)
WHERE transaction.status =“有争议”
返回不同Employee Name
,Retailer Name
这给了我 -
╒═══════════════╤════════════════════╕
│Employee Name │Retailer Name │
╞═══════════════╪════════════════════╡
│"Seth Snow" │["Gap", "Target"] │
├───────────────┼────────────────────┤
│"Roxie Aguilar"│["Gap", "BestBuy"] │
├───────────────┼────────────────────┤
│"Ricky Bond" │["BestBuy", "Nordstr│
│ │om"] │
├───────────────┼────────────────────┤
│"Carmen Dixon" │["Coach", "Nordstrom│
│ │"] │
├───────────────┼────────────────────┤
│"Bryon Ramos" │["Coach", "Foot Lock│
│ │er"] │
├───────────────┼────────────────────┤
│"Irvin Clayton"│["Express", "Kohls",│
│ │ "Nordstrom"] │
└───────────────┴────────────────────┘
但是,这是错误的,因为零售商“Gap”没有报告有争议的交易,因此 Roxie Aguilar 和 Seth Snow 只在 1 家报告了“争议”交易的商店工作过,而且他们的名字不应该出现在那里。
您可以通过在第一个
EXISTS
中使用 MATCH
子查询来获取您需要的内容,并且仅包括有争议的零售商:
MATCH (employee:Employee)-[:WORKS_AT]->(retailer:Retailer)
WHERE EXISTS { (retailer)<-[:SHOPPED_AT {status: "Disputed"}]-(:Customer) }
WITH employee, collect(retailer) AS retailers, count(*) AS count WHERE count > 1
RETURN employee.name AS `Employee Name`,
[retailer IN retailers | retailer.name] AS `Retailer Names`
此返回结果列如第二个示例中所示。