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
所以最后一个问题是:
- 如何在相同的 属性(DESC/ASC 差异)上执行条件
OrderBy
子句?
您可以像这样添加一个带有 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”时第二个不会做任何事情。
我有两个问题:
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
所以最后一个问题是:
- 如何在相同的 属性(DESC/ASC 差异)上执行条件
OrderBy
子句?
您可以像这样添加一个带有 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”时第二个不会做任何事情。