我想在cypher中创建一个all in one语句来填充数据表。两个字段计算Sample的数量:一个显示总数,另一个显示没有附加:Ghost标签的数字:
MATCH (a:Person)-[:OWNER]->(b:Project)-[:PROJECT]->(c:Import)-[:IMPORT|:INPUT|:OUTPUT*]->(d:Sample)
WITH a,b,c,d,d AS e WHERE NOT d:Ghost
RETURN DISTINCT b.Name,(a.`First Name` + " " + a.`Last Name`),b.Description,b.Date,count(DISTINCT c),count(DISTINCT d),count(DISTINCT e)问题是d和e得出了相同的值,而实际上e应该小于d。我怀疑d和e以某种方式指向同一个地址。我可以通过MATCH再次查询图形来解决这个问题,但是很明显,这是很昂贵的,我宁愿只做一次。有可能吗?
发布于 2016-11-14 15:12:56
WHERE过滤WITH返回的内容,并且只得到非Ghost节点。将CASE用于条件结果:
WITH a, b, c, d,
CASE
WHEN d:Ghost THEN null
ELSE d
END AS e您还可以为结果创建不同的示例节点,然后获取原始列表和筛选列表的大小(因此不会重复两次):
WITH DISTINCT b.Name AS projectName,
(a.`First Name` + " " + a.`Last Name`) AS fullName,
b.Description AS projectDescription,
b.Date AS projectDate,
count(DISTINCT c) AS importCount,
collect(DISTINCT d) AS samples
RETURN projectName, fullName, projectDescription, projectDate, importCount,
size(samples) AS sampleCount,
size([s IN samples WHERE NOT s:Ghost]) as nonGhostCounthttps://stackoverflow.com/questions/40588340
复制相似问题