subquery, except and view

From: Max Buvry <Max(dot)Buvry(at)enseeiht(dot)fr>
To: pgsql-sql(at)postgresql(dot)org
Subject: subquery, except and view
Date: 1999-12-07 14:43:54
Message-ID: 199912071443.PAA11193@enseeiht.enseeiht.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql



Hi,

Please, I need help to correct some sql queries...

Let me define my db :

CLIENT (NUM_CLT, NAME, ADR)
ITEM (NUM_IT, NAME, PRICE)
COMMAND(NUM_CLT, NUM_IT, QT)

I meet two problems : one concerns subqueries or
operator instruction "except" and the other, the view.

I don't understand why the two queries below
are not correct with Postgresql though it be correct with Oracle
(I want to know the clients which have not
made more than 2 commands) :

-------
QUERY 1
-------

select clt.num_clt
from client clt
where clt.num_clt not in
(select cd.num_clt
from commande cd
group by cd.num_clt
having count(*) > 2);

The PostgreSQL Error is : rewrite: aggregate column
view must be at rigth side in qual

I test the subquery and it is ok.


-------
QUERY 2
-------

select clt.num_clt
from client clt
except
select cd.num_clt
from command cd
group by cd.num_clt
having count(*) > 2;

The PostgreSQL Error is : parser: parse error at or next except

If I use "(" and ")" for the subquery, the PostgreSQL Error
is : parser: parse error at or next select.

I try to check "except" with simple query and I don't succeed it.

-------
QUERY 3
-------

I want to create a view and I want to name the column.
I don't find the exact syntax for this.

create view payment( NAME_C, TT ) as
select client.name NAME_C, sum(qt*prix) TT
from client, item, command
where client.num_clt=command.num_clt and item.num_item=command.num_item
group by client.name, client.num_clt

An other question : why the num_clt is selected also ?

If I don't name the column, the query is correct and Postgres
chooses the names sum in place of TT.
(select * from payment returns the correct result) :

create view payment as
select client.name, sum(qt*prix)
from client, item, command
where client.num_clt=command.num_clt and item.num_item=command.num_item
group by client.name, client.num_clt

But when I want to know the client which must pay more than 1000 :

select * from payment
where sum>1000

The PostgreSQL Error is : rewrite: aggregate column
view must be at rigth side in qual

In advance, thank you for your help.

mb

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message jose soares 1999-12-07 14:44:12 Re: [SQL] Fw: Whats happen here?
Previous Message Mario Jorge Nunes Filipe 1999-12-07 09:53:51 Re: [SQL] Wierd stuff