我已经在sql this question中看到了这个问题,但是将如何在firebase中实现。这是我的firebase结构
我需要按姓名总结费用总额。我需要这样的输出
输出
petrol:25
oil:83
gross:25
我尝试了以下代码
expensesaddref=databaseReference.child(username).child(monthyr);
totaldatabaseref=databaseReference.child(username).child("Expense Cost").child(monthyr);
expensesaddref.orderByChild("expensesName").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.d("Tag", "on exp total");
int tot=0;
String exp = null;
for(DataSnapshot ds:dataSnapshot.getChildren()){
ExpenseClass expenseAdd=ds.getValue(ExpenseClass.class);
tot+=expenseAdd.getTotal();
exp=expenseAdd.getExpensesName();
}
ExpenseClass expensesAdd=new ExpenseClass(exp,tot);
String ref= "expensescost_"+ expensesAdd.getExpensesName();
totaldatabaseref.child(ref).setValue(expensesAdd);
Log.d("TAG", exp + "");
Log.d("TAG", tot + "");
Log.d("Tag", "After exp total");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我的输出为0。请帮助我
答案 0 :(得分:1)
您可以使用orderByChild()
,然后获取total
子值来求和。
我的意思在代码中看起来像这样:
ref.child("October_2018").orderByChild("expensesName").equalTo("oil").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
int sum=0;
sum += data.child("total").getValue(Integer.class);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这里ref
是DatabaseReference
到您的Firebase数据库。