FW: Table Join (Maybe?)

From: "Phillip Smith" <phillips(at)weatherbeeta(dot)com(dot)au>
To: <pgsql-sql(at)postgresql(dot)org>
Subject: FW: Table Join (Maybe?)
Date: 2006-07-19 23:51:53
Message-ID: 003801c6ab8e$50610880$9b0014ac@ITPhil
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Thanks all for your suggestions - the below suggestion works perfectly.

A little tweak of the column counts and group by clauses makes it work like
a charm.

Richard - this particular extract is via PHP to a web page so I can't use
those reporting tools, but I'll have a look and fiddle for my next project -
Thanks!

Cheers,

-p

-----Original Message-----
From: Arulmani V A [mailto:arulmani_s(at)yahoo(dot)com]
Sent: Wednesday, 19 July 2006 20:49
To: Phillip Smith
Subject: Re: [SQL] Table Join (Maybe?)

Hi,

Postgres does not seem to support OLAP functions like ROLLUP, CUBE, etc. I'm
not a Postgres expert, but I think we can try the following alternative
approach :

Sample data for the two tables given by you are created as :

Table : stores
code name bms state business_open
1 Customer1 Y State1 Y
2 Customer2 Y State2 Y
3 Customer3 Y State1 Y
4 Customer4 Y State2 Y

Table : sales_figures
rep_date store sales_value sales_customers
2006-01-01 1 1000 0
2006-01-02 1 1000 0
2006-02-01 2 200 0
2006-02-02 2 200 0
2006-02-03 2 500 0
2006-01-03 1 100 0
2006-01-01 3 300 0
2006-01-02 3 200 0
2006-02-01 4 700 0
2006-02-02 4 400 0

If I execute the following query :
SELECT a.name, a.state, SUM(b.sales_value) FROM stores a, sales_figures b
WHERE a.code = b.store GROUP BY a.state, a.name
UNION
SELECT NULL, a.state, SUM(b.sales_value) FROM stores a, sales_figures b
WHERE a.code = b.store GROUP BY a.state
UNION
SELECT 'GRAND TOTAL', NULL, SUM(b.sales_value) FROM stores a, sales_figures
b WHERE a.code =
b.store ORDER BY 2

I get the following output (same as what you expect?) :

name state sum

Customer1 State1 2100
Customer3 State1 500
NULL State1 2600
Customer2 State2 900
Customer4 State2 1100
NULL State2 2000
GRAND TOTAL NULL 4600

Is the above approach OK?

Regards
Arul

----- Original Message ----
From: Phillip Smith <phillips(at)weatherbeeta(dot)com(dot)au>
To: pgsql-sql(at)postgresql(dot)org
Sent: Wednesday, July 19, 2006 1:04:58 PM
Subject: [SQL] Table Join (Maybe?)

Hi again all,

I have two tables:

1. Sales figures by date and customer.

2. Customer details - including their Geographic State

I need to extract a report from the first table (I can do that!), and in
that report order by their State (I can do that too!), but I also need a
summary of all the customers in each state, below the end of each state, and
have a grand total at the bottom.

Eg:

Customer 1 State 1 $100.00

Customer 2 State 1 $100.00

State 1 $200.00

Customer 3 State 2 $100.00

Customer 4 State 2 $100.00

State 2 $200.00

Grand Total $400.00

Does anyone have any magic pointers for me? I've been playing with SELECT
INTO as 2 queries (the individual customers, then the summary figures added
to the temp table) but I end up with ROWS IN FIRST QUERY * ROWS IN SECOND
QUERY instead of them all sorted together nicely :-(

Thanks all,

-p

Table Defs:

CREATE TABLE sales_figures

(

rep_date date NOT NULL,

store varchar(6) NOT NULL,

sales_value numeric DEFAULT 0,

sales_customers int4 DEFAULT 0,

CONSTRAINT sales_figures_pkey PRIMARY KEY (rep_date, store),

CONSTRAINT sales_figures_store FOREIGN KEY (store)

REFERENCES stores (code) MATCH SIMPLE

ON UPDATE NO ACTION ON DELETE NO ACTION

)

CREATE TABLE stores

(

code varchar(2) NOT NULL DEFAULT ''::character varying,

name varchar(32) NOT NULL DEFAULT ''::character varying,

bms varchar(1) DEFAULT 'Y'::character varying,

state text DEFAULT 'UNKNOWN'::text,

business_open varchar(1) DEFAULT 'Y'::character varying,

CONSTRAINT stores_pkey PRIMARY KEY (code)

)

Phillip Smith
IT Coordinator
Weatherbeeta P/L
8 Moncrief Rd
Nunawading, VIC, 3131
AUSTRALIA

*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to the
addressee. If you are not the addressee indicated in this message or
responsible for delivery of the message to such person, you may not copy or
deliver this message to anyone, and you should destroy it and kindly notify
the sender by reply email.

Information in this message that does not relate to the official business of
Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
Weatherbeeta, its employees, contractors or associates shall not be liable
for direct, indirect or consequential loss arising from transmission of this
message or any attachments

*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to
the addressee. If you are not the addressee indicated in this message or
responsible for delivery of the message to such person, you may not copy
or deliver this message to anyone, and you should destroy it and kindly
notify the sender by reply email.

Information in this message that does not relate to the official business
of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta.
Weatherbeeta, its employees, contractors or associates shall not be liable
for direct, indirect or consequential loss arising from transmission of this
message or any attachments

Browse pgsql-sql by date

  From Date Subject
Next Message Aaron Bono 2006-07-20 01:34:10 Re: Multi-table insert using RULE - how to handle id?
Previous Message Collin Peters 2006-07-19 17:42:56 Multi-table insert using RULE - how to handle id?