Ok thanks for this precision Merlin.
Seems like aggregates are way more powerful than I thought.

Obviously I need a lot more reading about custom aggregates before fully
understanding it.

Elliot's query is pure SQL so obviously very cool !

It could be improved at the margin, and aggregates/function are certainly
faster on big data.
But if you have no specific needs I would say Elliot is easier and more
universal.


Cheers & thanks all for this good discussion.

Rémi-C


2013/10/23 Merlin Moncure <mmonc...@gmail.com>

> > 2013/10/22 Merlin Moncure <mmonc...@gmail.com>
> >> > With a standard loop, I loop n times, and each times I only need the
> >> > current
> >> > row plus the previous row which I put in memory, thus O(n).
> >>
> >> For posterity, the above is incorrect.  Since the aggregate is ordered
> >> through the window function, it gets executed exactly once per output
> >> row.  It behaves exactly like a loop.  You know this because there is
> >> no array in the aggregate state.
> >>
> > just out of pure curiosity,
> > is it always the case or is it due to this particular aggregate?
>
> It is always the case.  Generally speaking, aggregates, especially
> user defined aggregates, are run once per input row.   In this case
> the main utility of window functions is to order the aggregate
> execution calls and (especially) allow intermediate output per input
> row, instead of per aggregate grouping.
>
> On Tue, Oct 22, 2013 at 6:01 PM, Robert James <srobertja...@gmail.com>
> wrote:
> > Wow, this is an excellent discussion - and I must admit, a bit beyond
> > my abilities.  Is there a consensus as to the best approach to adopt?
> > Is Elliot's the best?
>
> For this *specific* problem, I would give Elliot's (extremely clever)
> query the nod on the basis that it does not require any supporting
> infrastructure, which is always nice.  That being said, once you start
> getting the mojo of user defined aggregates + window functions it
> starts to become clear that it's a cleaner way of doing many types of
> things that are normally handled by loops.
>
> merlin
>

Reply via email to