/* SUM and AVERAGE via PP rule. */ PROCEDURE Main() LOCAL aStruct, nSum, nAvg FErase( "people.dbf" ) aStruct := { { "ID", "N", 4, 0 }, { "AGE", "N", 3, 0 } } dbCreate( "people.dbf", aStruct ) USE people.dbf NEW EXCLUSIVE ALIAS p dbAppend() ; FieldPut(1, 1) ; FieldPut(2, 18) dbAppend() ; FieldPut(1, 2) ; FieldPut(2, 25) dbAppend() ; FieldPut(1, 3) ; FieldPut(2, 30) dbAppend() ; FieldPut(1, 4) ; FieldPut(2, 45) dbAppend() ; FieldPut(1, 5) ; FieldPut(2, 60) dbCommit() /* SUM all ages */ dbGoTop() SUM p->age TO nSum ? "1. SUM p->age =", nSum, "(expect 178 = 18+25+30+45+60)" /* SUM with FOR */ dbGoTop() SUM p->age TO nSum FOR p->age >= 30 ? "2. SUM p->age FOR age>=30 =", nSum, "(expect 135 = 30+45+60)" /* AVERAGE all ages */ dbGoTop() AVERAGE p->age TO nAvg ? "3. AVERAGE p->age =", nAvg, "(expect 35.6)" /* AVERAGE with FOR */ dbGoTop() AVERAGE p->age TO nAvg FOR p->age >= 30 ? "4. AVERAGE p->age FOR age>=30 =", nAvg, "(expect 45)" /* AVERAGE with no matching rows */ dbGoTop() AVERAGE p->age TO nAvg FOR p->age > 200 ? "5. AVERAGE p->age FOR age>200 =", nAvg, "(expect 0)" dbCloseArea() FErase( "people.dbf" ) ? "DONE" RETURN