2016-11-28 43 views
0

我想象下面查詢想的情況下,條件爲使用內部元件總和在N1QL couchbase

SELECT round(sum (ARRAY_SUM(case when ANY x IN transactions SATISFIES 
x.type` `in [0,4] then transactions[*].amount else 0 end))),2) 
total_income,_type`  `FROM mybucket WHERE _type='Company' 

我有多個JSON像下面

{ 
    "_type": "Company", 
    "created": "2015-12-01T18:30:00.000Z", 
    "transactions": [ 
    { 
     "amount": "96.5", 
     "date": "2016-01-03T18:30:00.000Z", 
     "type": 0 
    }, 
    { 
     "amount": "483.7", 
     "date": "2016-01-10T18:30:00.000Z", 
     "type": 0 
    } 
    ] 
} 

我要總結事務 - 的運行>在[0,1]中有類型的數量我想在情況下使用它。我該怎麼做 ??

回答

1
SELECT CASE WHEN array_count(a) > 0 THEN ARRAY_SUM(a) ELSE 0 END 
FROM default 
LET a = ARRAY TONUMBER(x.amount) FOR x in transactions WHEN x.type IN [0,4] END 
WHERE _type = "Company"; 
+1

雖然此代碼片段可能會解決問題,但它並不能解釋爲什麼或如何回答問題。請[請提供您的代碼解釋](// meta.stackexchange.com/q/114762/269535),因爲這確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 **舉報人/評論者:** [僅用於代碼解答,如downvote,請勿刪除!](// meta.stackoverflow.com/a/260413/2747593) –

+0

非常好,非常感謝您 –

0

btw,你可以在N1QL中使用不同的語言結構編寫這個查詢。請檢查UNNESTarray-indexing。特別是,當你在數組元素上有過濾器(例如transactions [*] .type)時,你可以利用數組索引來更好地執行和下推where子句(和索引)的任何過濾。

相關問題