2017-05-29 45 views
0

如何在Cloudant中实现以下查询?如何在Cloudant中选择总和(sal),平均(分数),雇员形式雇员来实现多重汇总?

SELECT companyId, AVG(score), SUM(sal), dept 
FROM employee 
WHERE ((joiningdate = ?) 
    AND (empid IS NOT NULL)) 
GROUP BY empId, companyId, dept 

对于单聚集我可以在我的例如emit语句值定义属性,如果我想获得萨尔的总和只有我EMIT会像emit([doc.companyId, doc.score,doc.dept], doc.sal)和我的降低将返回doc.sal的总和。

但现在在我的情况下,我必须在两个领域应用聚合。我们如何在Cloudant中实现这一点?

回答

0

您可能会尝试定义自定义的Reduce功能。

例如,如果你的地图功能是与此类似:

function (doc) { 
    if (doc.companyId) { 
    emit([doc.companyId, doc.dept], {"score": doc.score, "sal": doc.sal}); 
    } 
} 

那么你Reduce函数可能是这样的:

function (keys, values, rereduce) { 
    sal = sum(values.map(function (v) {return v.sal})); 
    score = sum(values.map(function (v) {return v.score}))/values.length; 

    return {"score": score, "sal": sal}; 
} 
相关问题