Hi,

I'm trying to compute a non-null weighted average in an AQL query.  In the 
same query I would like to also retrieve some other aggregates such as 
regular averages and sums.  The collection I'm using has ~300k records that 
are fairly small.

When I use the ternary operator to compute my weight total for all non-null 
entries it significantly degrades performance.  A 1 second query now takes 
8 seconds.  What is the best way to optimize the following query while 
still being able to compute a non-null weighted average?  I'm trying not to 
query multiple times to generate what will be one result set.  As a 
separate query when using a filter to remove all null credit scores it 
takes about ~2 seconds.

Here is my query with the ternary operator.  This query is taking ~8 
seconds to complete.

 FOR l in loans2
    COLLECT origDate = l.Acquisition.ORIGINATION_DATE
    AGGREGATE 
        sumUPB = SUM(l.Acquisition.ORIGINAL_UPB),
        weightedFico = SUM(l.Acquisition.BORROWER_CREDIT_SCORE * 
l.Acquisition.ORIGINAL_UPB),
        ficoUPB = SUM( IS_NULL(l.Acquisition.BORROWER_CREDIT_SCORE) ? 0 : 
l.Acquisition.ORIGINAL_UPB )

    SORT origDate

  RETURN {
    OrigDate: DATE_FORMAT(origDate, "%m-%yyyy"), 
    TotalUPB: sumUPB,
    wavgFICO: weightedFico / ficoUPB}


Now that same query without the ternary operator and using the regular sum 
of UPB (unpaid principal balance)  takes only ~1 second to complete.

 FOR l in loans2
    COLLECT origDate = l.Acquisition.ORIGINATION_DATE
    AGGREGATE 
        sumUPB = SUM(l.Acquisition.ORIGINAL_UPB),
        weightedFico = SUM(l.Acquisition.BORROWER_CREDIT_SCORE * 
l.Acquisition.ORIGINAL_UPB),

    SORT origDate
  RETURN {
    OrigDate: DATE_FORMAT(origDate, "%m-%yyyy"), 
    TotalUPB: sumUPB,
    wavgFICO: weightedFico / sumUPB}

-- 
You received this message because you are subscribed to the Google Groups 
"ArangoDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to