Neo4j查询中的两个值为DISTINCT

时间:2018-02-19 23:28:23

标签: neo4j

我正在向Neo4j数据库发送查询,我想仅返回包含两个数字的项目 - tsneXtsneY作为不同的“点”。因此,tsneX可以等于tsneX,但在这种情况下,第二个数字tsneY不应该。这是我的疑问:

MATCH (c:Cell)-[ex:EXPRESSES]->(g:Gene { geneName: "' + geneName + '" }) 
RETURN ex.expr, c.tsneX, c.tsneY; 

所以,我想要像男孩一样

MATCH (c:Cell)-[ex:EXPRESSES]->(g:Gene { geneName: "' + geneName + '" }) 
WITH DISTINCT (c.tsneX, c.tsneY) AS point
RETURN ex.expr, point; 
  

示例:

    ex.expr  c.tsneX  c.tsneY
1.    4        1.2      1.2
2.    5        2.1      3.3
3.    1        1.2      1.2

其中一个 - 需要删除第一个或第三个,因为它们的tsneXtsneY坐标分别相等。所以,我希望只返回第一个和第二个,但是第三个被删除,因为ex.expr在第一个中更高。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

所以你想要一对[c.tsneX,c.tsneY],如果有更多结果和相同的点,你只需要高位ex.expr。这应该可以解决问题:

MATCH (c:Cell)-[ex:EXPRESSES]->(g:Gene { geneName: "' + geneName + '" }) 
RETURN [c.tsneX, c.tsneY] AS point, max(ex.expr) as expr

如果您希望将该点作为对象而不是列表,则可以执行以下操作:

{x:c.tsneX, y:c.tsneY} AS point

在任何一种情况下,max(ex.expr)聚合函数都将确保剩余的非聚合值point是不同的。