Re: how to use an aggregate function - Mailing list pgsql-sql

From Matthew Nuzum
Subject Re: how to use an aggregate function
Date
Msg-id 006401c320c8$987e2de0$a322fea9@mattspc
Whole thread Raw
In response to how to use an aggregate function  (ggunning@esatclear.ie (jmsmithe))
List pgsql-sql
Hi, I'm not an expert, but I believe I had this same problem recently.  I
think that what you need to do is use the "HAVING" phrase at the end.  You
can use it instead of or in addition to a where clause.

For a simple example, 

SELECT * FORM table HAVING Avg(price) > 6;

This should get you past the error about using an aggregate in the where
clause.

--
Matthew Nuzum
www.bearfruit.org
cobalt@bearfruit.org
> -----Original Message-----
> From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-
> owner@postgresql.org] On Behalf Of jmsmithe
> Sent: Saturday, May 17, 2003 12:18 PM
> To: pgsql-sql@postgresql.org
> Subject: [SQL] how to use an aggregate function
> 
> Hello
> 
> Imagine if you would if I had a database like this:
> 
> DROP TABLE Customer;
> CREATE TABLE Customer(
>         CustomerID int,
>         Cname varchar(10),
>         City varchar(10),
>         PRIMARY KEY(CustomerID)
> );
> 
> DROP TABLE Item;
> CREATE TABLE Item(
>         ItemID int,
>         UnitPrice int,
>         PRIMARY KEY(ItemID)
> );
> 
> DROP TABLE AOrder;
> CREATE TABLE AOrder(
>         AOrderID int,
>         Odate date,
>         CustomerID int,
>         Ird_Amt int,
>         PRIMARY KEY(AOrderID),
>         FOREIGN KEY(CustomerID) REFERENCES Customer(CustomerID)
> );
> 
> DROP TABLE OrderItem;
> CREATE TABLE OrderItem(
>         AOrderID int,
>         ItemID int,
>         Qty int,
>         PRIMARY KEY(AOrderID, ItemID),
>         FOREIGN KEY(AOrderID) REFERENCES AOrder(AOrderID),
>         FOREIGN KEY(ItemID) REFERENCES Item(ItemID)
> );
> 
> DROP TABLE Warehouse;
> CREATE TABLE Warehouse(
>         WarehouseID int,
>         Wcity varchar(10),
>         PRIMARY KEY(WarehouseID)
> );
> 
> DROP TABLE Shipment;
> CREATE TABLE Shipment(
>         AOrderID int,
>         WarehouseID int,
>         ShipDate date,
>         PRIMARY KEY(AOrderID, WarehouseID),
>         FOREIGN KEY(AOrderID) REFERENCES AOrder(AOrderID),
>         FOREIGN KEY(WarehouseID) REFERENCES Warehouse(WarehouseID)
> );
> 
> 
> INSERT INTO Customer VALUES(1, 'Jack', 'NeverLd');
> INSERT INTO Customer VALUES(2, 'Jill', 'Wall');
> INSERT INTO Customer VALUES(3, 'Emma', 'Desolat');
> 
> INSERT INTO AOrder VALUES(1, '1/1/2003', 1, 3);
> INSERT INTO AOrder VALUES(2, '1/1/2003', 3, 3);
> 
> INSERT INTO Item VALUES(1, 5);
> INSERT INTO Item VALUES(2, 5);
> INSERT INTO Item VALUES(3, 15);
> 
> INSERT INTO OrderItem VALUES(1, 1, 1);
> INSERT INTO OrderItem VALUES(1, 2, 5);
> INSERT INTO OrderItem VALUES(1, 3, 15);
> 
> INSERT INTO OrderItem VALUES(2, 1, 2);
> INSERT INTO OrderItem VALUES(2, 2, 5);
> 
> INSERT INTO Warehouse VALUES(1, 'Water fall');
> INSERT INTO Warehouse VALUES(2, 'Fall vill');
> 
> INSERT INTO Shipment VALUES(1, 2, '1/1/2002');
> INSERT INTO Shipment VALUES(2, 1, '1/1/2002');
> 
> 
> How would I
> List the name of customers who have paid an average of more then $6.
> Produce a listing Cname, Avg_Paid
> 
> All I can think of is this.
> 
> SELECT Customer.Cname, AVG(Item.UnitPrice) AS Avg_Paid
> FROM Customer
> JOIN AOrder
> ON Customer.CustomerID = AOrder.CustomerID
> JOIN OrderItem
> ON AOrder.AOrderID = OrderItem.AOrderID
> JOIN Item
> ON OrderItem.ItemID = Item.ItemID
> GROUP BY Customer.Cname
> ;
> 
> I can't figure out how to limit it to over $6?
> 
> 
> Thanks for any help.
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)



pgsql-sql by date:

Previous
From: Joe Conway
Date:
Subject: Re: Another sub-select problem...
Next
From: Stephan Szabo
Date:
Subject: Re: tablename as attribute in pgplsql