GROUPing by expressions, and subSELECTs

From: Shane Wright <me(at)shanewright(dot)co(dot)uk>
To: pgsql-sql(at)postgresql(dot)org
Subject: GROUPing by expressions, and subSELECTs
Date: 2002-02-28 18:29:57
Message-ID: 200202281830.g1SIU1s11290@fullerruss.dsvr.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message John J. Allison 2002-02-28 18:54:02 LIKE with no wildcards problem
Previous Message Céline Rivière 2002-02-28 15:44:42 CREATE FUNCTION and LANGUAGE 'C'