2016-06-22 120 views
2

有沒有辦法指定將null值置於排序列表中的哪個位置?ORDER BY null position

我有一個列表我想按降序排列。我想要包含date=null的節點,只是在列表的末尾。

尋找的暗號是這樣的:

ORDER BY date DESC NULLS LAST

從Neo4j的:

當排序結果集,NULL總會降臨在 結果的末尾上升集排序,並首先在做降序 排序。

http://neo4j.com/docs/developer-manual/current/#order-by-ordering-null

+0

你可以選擇哪裏不是空,命令,然後聯合選擇空?這有點羅嗦,但... –

+0

我可以,但這將是不必要的成本。只有多個節點的date屬性爲空,總數約爲5000個。基本上,只有那些進入最後一頁的人才能看到它們。 – lifwanian

回答

2

您可以使用下面: ORDER BY日期爲NULL DESC

+0

使用'ORDER BY日期IS NOT NULL DESC'工作。謝謝! – lifwanian

+3

@lifwanian這不起作用。值爲NULL的行在最後,但其他行不按降序排序。 –

+1

在這種情況下,您可以通過像ORDER BY日期IS NOT NULL DESC,日期DESC那樣設置第二個訂單。它實際上是在布爾上進行排序。所以,所有有null的記錄是1,其他都是0. –

2

您可以通過COALESCE結果進行排序。

例如,我們有以下節點:

MERGE (A1:Test {name:'a1'}) 
MERGE (A2:Test {name:'a2', date: 1}) 
MERGE (A3:Test {name:'a3', date: 2}) 
MERGE (A4:Test {name:'a4'}) 

我們可以排序方式如下:

MATCH (A:Test) 
RETURN A.name, 
     A.date 
ORDER BY 
     COALESCE(A.date, -1) DESC 
0

ORDER BY也許使用coalesce()

ORDER BY coalesce(val, 0)