in reply to Re:x3 Array of Hash interface to an Array of Array? (grouping in SQL)
in thread Array of Hash interface to an Array of Array?

8-)

I like this SQL trap because I believe that it is natural to want to sort descending by an absolute aggregated value.

The real issue is that the alias of the result column being the same as the name of an input column causes some SQL engines to deliver incorrect results without alerting the programmer to the hidden problem.

Many SQL engines attempt to eliminate the sort phase by assembling the data in the correct order whilst examining / aggregating input rows. In most engines, a GROUP BY will automatically order a result set, but when present, the ORDER BY will take precedence. When the ORDER BY contains a function - e.g ABS() the function is called with the current input row value - not the aggregated resultset value which has not yet been finalised.

Often, the results are only SOMETIMES incorrect - the nastiest form of bug. I tracked down an instance of this rare beetle, that was only seen on a handful of occasions in two years of processing.

When I raised it with ****, the initial response was 'Why would you want to anyway?', followed by redirection to details of the SQL spec which indeed does not mention this facility.

The following SQL at least complains if the SQL engine doesn't support sorting on an absolute aggregated value:

select name, sum(value) as sumval from mytable group by name order by abs(sumval) desc

I prefer named resultset columns rather than

order by abs(2) desc

I haven't worked with Postgresql to know if it does the right thing - which 'value' column was summed, absed and sorted during the query? Changing the alias would show us if it is really doing the Right Thing - if so, hoorah! A second DB that caters to common sense!

FWIW the DWIM DB engine that works in this case is probably long defunct - I haven't seen it for years - it was called FoxPro, and I think it was captured by the Big Bad Wolf.

Replies are listed 'Best First'.
Re: Re: Re:x3 Array of Hash interface to an Array of Array? (grouping in SQL)
by mildside (Friar) on Sep 02, 2003 at 03:51 UTC
    FWIW the DWIM DB engine that works in this case is probably long defunct...
    I'm guessing FWIW is "for what it's worth", but what the heck is DWIM?

    Cheers!

      From perlop:

      When presented with something that might have several different interpretations, Perl uses the DWIM (that's "Do What I Mean") principle to pick the most probable interpretation. This strategy is so successful that Perl programmers often do not suspect the ambivalence of what they write. But from time to time, Perl's notions differ substantially from what the author honestly meant.