Cypher 条件 `ORDER BY` 子句(相同 属性,不同 ASC/DESC)

Cypher Conditional `ORDER BY` clause (same property, differ ASC/DESC)

我有两个问题:

MATCH (n:Node) 
RETURN n.value
ORDER BY n.value DESC
LIMIT 5
MATCH (n:Node) 
RETURN n.value
ORDER BY n.value ASC
LIMIT 5

我想通过添加一个附加参数将它们结合起来。我用 CASE 语句尝试了不同的方法,但看起来 CASE 语句允许我更改排序的 属性,而不是排序的类型...

这是一个伪代码,可以实现我想要实现的目标(但是这个显然行不通):

WITH "ASC" AS sortType
MATCH (n:Node) 
RETURN n.value
ORDER BY n.value (CASE WHEN sortType = "ASC" THEN ASC ELSE DESC END)
LIMIT 5

所以最后一个问题是:

您可以像这样添加一个带有 sortValue 的列

RETURN  n.value,
        CASE WHEN sortType = ‘DESC’ THEN n.value * -1 ELSE n.value END AS sortValue
ORDER BY sortValue

在您的 RETURN 语句中添加 sortValue 可以使您获得

| value | sortValue |
|     1 |          1|
|     2 |          2|
|     3 |          3|

| value | sortValue |
|     3 |         -3|
|     2 |         -2|
|     1 |         -1|

如果您希望对要排序的列具有灵活性,也可以使用此机制,只要确保将正确的值放入 sortValue 列即可。

您可以为 ORDER BY 添加 2 个表达式:

     CASE WHEN sortType = "ASC" THEN n.value ELSE null END ASC,
     CASE WHEN sortType = "ASC" THEN null ELSE n.value END DESC

它们都会被应用,但是当 sortType 不是“ASC”时第一个不会做任何事情,当 sortType 是“ASC”时第二个不会做任何事情。