in reply to Re: Re: Array of Hash interface to an Array of Array?
in thread Array of Hash interface to an Array of Array?
My favourite SQL shortcoming is:
OK, at the risk of making a fool of myself, I'll bite.
I believe that that statement is syntactically incorrect. If it works in one engine, I would say it is broken. (Which one are we talking about, by the way)?
When you say sum(value) as value, in your order by clause, you can't use value (i.e. the right hand side of the selected item clause) as the aggregator. You must use sum(value) (the left hand side of the selected item clause).
I just whipped up a sample table in Postgresql. It chokes on your example, but renders the correct results on mine. Consider:
select * from foo; name | value ------+------- foo | -10 foo | -6 foo | 12 foo | 34 bar | 6 bar | 23 bar | 76 rat | -6 rat | -60 (9 rows)
and the result:
select name, sum(value) as value from foo group by name order by abs(s +um(value)) desc; name | value ------+------- bar | 105 rat | -66 foo | 30 (3 rows)
Looks good to me. Now, it may well be that you can use what I term "the right hand side" in group by, but I think I'll continue using the left hand side. Even if it is clunky and redundantly verbose, at least I know what's going on.
And I have been known to write Perl scripts that generate selected aggregates paired up with corresponding group by clauses just to ensure that it's all correct and avoid breaking the DRY principle.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re:x3 Array of Hash interface to an Array of Array? (grouping in SQL)
by jaa (Friar) on Sep 01, 2003 at 15:31 UTC | |
by mildside (Friar) on Sep 02, 2003 at 03:51 UTC | |
by EdwardG (Vicar) on Sep 02, 2003 at 06:36 UTC |