GROUPing by expressions, and subSELECTs - Mailing list pgsql-sql

From Shane Wright
Subject GROUPing by expressions, and subSELECTs
Date
Msg-id 200202281830.g1SIU1s11290@fullerruss.dsvr.co.uk
Whole thread Raw
Responses Re: GROUPing by expressions, and subSELECTs  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
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


pgsql-sql by date:

Previous
From: Rajesh Kumar Mallah
Date:
Subject: Re: backward SQL query
Next
From: "John J. Allison"
Date:
Subject: LIKE with no wildcards problem