RE: [HACKERS] views and group by (formerly: create view as selec t distinct)

From: Michael J Davis <michael(dot)j(dot)davis(at)tvguide(dot)com>
To: "'jwieck(at)debis(dot)com'" <jwieck(at)debis(dot)com>, pgsql-hackers(at)postgreSQL(dot)org
Subject: RE: [HACKERS] views and group by (formerly: create view as selec t distinct)
Date: 1999-04-26 23:05:44
Message-ID: 93C04F1F5173D211A27900105AA8FCFC145423@lambic.prevuenet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

This implies that the "group by" clause is not supported in views. I have
created views that use the group by clause and they appear to work. I have
not verified the content of the records. I would like to know more about
what Jan means when he says that "group by" is not supported in views? Does
it mean that the content of the results could be unexpected or are they
conditions where they may work and other conditions where they don't work?
More info would be greatly appreciated.

Thanks, Michael

-----Original Message-----
From: jwieck(at)debis(dot)com [SMTP:jwieck(at)debis(dot)com]
Sent: Monday, April 26, 1999 9:35 AM
To: rbrad(at)hpb50023(dot)boi(dot)hp(dot)com
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] create view as select distinct (fwd)

>
> This is on the TODO list.
>
> I actually have a solution that seems to work fine, but I wanted
to run it past
> the backend guru's after we have finished the 6.5 beta.
>
> Sorry I din't get it finished before the beta started.
>
> -Ryan

I wonder how it does!

Have the following:

CREATE TABLE t1 (a int4, b text);
CREATE TABLE t2 (c int4, d text);
CREATE VIEW v2 AS SELECT DISTINCT ON c * FROM t2;

Populate them with:

t1:
1 'one'
1 'ena'
2 'two'
2 'thio'
3 'three'
3 'tria'
4 'four'
4 'tessera'

t2:
1 'I'
1 'eins'
2 'II'
2 'zwei'
3 'III'
3 'drei'

Now you do

SELECT t1.a, t1.b, v2.d FROM t1, v2
WHERE t1.a = v2.c;

Does that work and produce the correct results? Note that
there are more than one correct results. The DISTINCT SELECT
from t2 already has. But in any case, the above SELECT should
present 6 rows (all the rows of t1 from 1 to 33 in english
and greek) and column d must show either the roman or german
number.

To make it more complicated, add table t3 and populate it
with more languages. Then setup

CREATE VIEW v3 AS SELECT DISTINCT ON e * FROM t3;

and expand the above SELECT to a join over t1, v2, v3.

Finally, think about a view that is a DISTINCT SELECT over
multiple tables. Now you build another view as SELECT from
the first plus some other table and make the new view
DISTINCT again.

The same kind of problem causes that views currently cannot
have ORDER BY or GROUP BY clauses. All these clauses can only
appear once per query, so there is no room where the rewrite
system can place multiple different ones. Implementing this
requires first dramatic changes to the querytree layout and I
think it needs subselecting RTE's too.

Sorry - Jan

--


#======================================================================#
# It's easier to get forgiveness for being wrong than for being
right. #
# Let's break this rule - forgive me.
#
#======================================== jwieck(at)debis(dot)com (Jan
Wieck) #

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Vince Vielhaber 1999-04-27 01:07:01 RE: Mysql comparison
Previous Message Brian P Millett 1999-04-26 20:57:26 Re: [HACKERS] Re: ERROR: index_rescan: invalid amrescan regproc ???