将此数据集导入为表格:
https://data.cityofnewyork.us/Housing-Development/Registration-Contacts/feu5-w2e2#revert
我使用以下查询执行聚合,然后尝试根据缩减字段按降序排序。我的意图是根据该字段的计数进行排序,或者让聚合创建一个名为count的第二个字段,并按照减少数组计数或长度的降序对分组结果进行排序。如何在rethinkdb中完成?
查询:
A=[110 503
402 110
300 900
300 402]
[~,~,D]=unique(A);
reshape(D,size(A))
答案 0 :(得分:1)
I don't quite understand what you're going for, but does this do what you want? If not, what do you want to be different in the output?
r.table("contacts")
.filter({"Type": "Agent","ContactDescription" : "CONDO"})
.hasFields("CorporationName")
.group("CorporationName")
.ungroup()
.merge(function(row){ return {count: row('reduction').count()}; })
.orderBy(r.desc('count'))
答案 1 :(得分:0)
你快到了:
r.table("contacts").filter({"Type": "Agent","ContactDescription" : "CONDO"}).hasFields("CorporationName").group("CorporationName").count().ungroup().orderBy(r.desc('reduction'))
看到.count()
?这是一个map-reduce操作,用于获取每个组的计数。
我还没有在您的数据集上测试查询。如果您遇到问题,请发表评论。
<小时/> 修改强>
如果您要添加计数字段并保留原始文档,则需要使用map
和reduce
。在你的情况下,它应该是这样的:
r.table("contacts").filter({"Type": "Agent","ContactDescription" : "CONDO"})
.hasFields("CorporationName")
.group("CorporationName")
.map(r.row.merge({count:1}))
.reduce(function(left, right){
return {
count: left('count').add(right('count')),
<YOUR_OTHER_FIELDS>: left('<YOUR_OTHER_FIELDS>'),
...
};
})
.ungroup().orderBy(r.desc(r.row('reduction')('count')))
修改强>
我不确定这是否可以解决问题,但值得一试:
.reduce(function(left, right){
return left.merge({count: left('count').add(right('count'))})
})