Hi
I have somewhat of a problem with what has got to be my biggest query ever.
So y'all dont get put off by the query itself, here's the problem:
It needs to GROUP BY the result of an expression, thats fine, I put the
expression in the fields bit, and GROUP BY the expression at the end:
SELECT [fields], [expression]
FROM table
GROUP BY [expression]
Now, the problem is that I want to use the result of that expression in a
subquery. So, I tried nam the result of the expression (...[expression] AS
name...), but no luck. So, I recreated the expression in the subquery and
specified the fields used in the expression hoping that might work:
SELECT [fields], [expression], (SELECT * FROM table2 WHERE [expression]) AS mynewfield
FROM table
GROUP BY [expression]
But, it gives this error:
ERROR: Sub-SELECT uses un-GROUPed attribute [table].[field] from outer
query
I'm stumped, and the query is screwing with my mind already. Precalculating
the result of the expression into a different isn't an option because of the
structure and context of its use. Anyone got any ideas?
For the brave, here's the query. I know its messy, but it's dynamically
generated - optimisation comes later...
SELECT iid1 AS iid, ((field1 - 1009670400) / 86400) AS period,
(to_char(ROUND((COUNT(iid1))::float / ( SELECT COUNT(rid) FROM table2 AS
myresponses WHERE (sid=922120971) AND (field1>=(table2.field1
- 1009670400) / 86400) AND (field1<=((table2.field1 -
1009670400) / 86400)+86400) )::float * 100.0, 2), '999.99') || '%') AS count
FROM table1, table2 WHERE (nid=870428218) AND (table2.rid=table1.rid) AND
(field1 >= 1009670400) AND (field1 <= 1014940800) GROUP BY
((field1 - 1009670400) / 86400), iid1
...the names have been changed to protect the innocent...
Any help appreciated,
thanks
Shane