Aggregate question (Sum) - Mailing list pgsql-sql

From Luiz K. Matsumura
Subject Aggregate question (Sum)
Date
Msg-id 4741F63A.6070500@planit.com.br
Whole thread Raw
Responses Re: Aggregate question (Sum)  ("Rodrigo De León" <rdeleonp@gmail.com>)
List pgsql-sql
Hi All,

I want to know if there are an easy manner to do an SQL like this bellow
where TotalOrdersValue sum the order.total just one time per order (as 
count(DISTINCT order.id) do)

SELECT order.dtorder    , Count( DISTINCT order.fk_customer ) AS QtyCustomer    , Count( DISTINCT order.id ) AS
QtyOrder   , Sum( order_item.qty ) AS TotalQtyItem    , Sum( order.total ) AS TotalOrders
 
FROM order JOIN order_item ON order_item.fk_order = order.id
GROUP BY 1
ORDER BY 1


Ex.
ORDER
Id | dtorder    | fk_customer |   total
-----------------------------------------1 | 2007-01-01 |           1 |  100.002 | 2007-01-01 |           1 |   30.00

order_item
fk_order |  qty  | fk_product
--------------------------------1       |    5  |           A1       |    2  |           B2       |    3  |
C

The query acctualy returns (as expected):
 dtorder  | QtyCustomer | QtyOrder  | TotalQtyItem | TotalOrders
------------------------------------------------------------------
2007-01-01 |          1  |        2  |           10 |      230.00


But I want
 dtorder  | QtyCustomer | QtyOrder  | TotalQtyItem | TotalOrders
------------------------------------------------------------------
2007-01-01 |          1  |        2  |           10 |      130.00


I just want to avoid to do, if possible, things like:

SELECT totals.dtorder    , totals.QtyCustomer    , totals.QtyOrder    , totals.TotalQtyItem    , Sum( order.total ) AS
TotalOrders
FROM ( SELECT order.dtorder            , Count( DISTINCT order.fk_customer ) AS QtyCustomer            , Count(
DISTINCTorder.id ) AS QtyOrder            , Sum( order_item.qty ) AS TotalQtyItem       FROM order JOIN order_item ON
order_item.fk_order= order.id       GROUP BY 1 ) totals    JOIN order ON order.dtorder = totals.dtorder
 
GROUP BY 1,2,3,4
ORDER BY totals.dtorder

I say this because it's seem a waste of effort just to sum a value that 
can be calculated on the same loop where postgresql will go on table 
order...
If someone can give me some hint I will apreciate.

Tanks in advance.

-- 
Luiz K. Matsumura
Plan IT Tecnologia Informática Ltda.



pgsql-sql by date:

Previous
From: "Sabin Coanda"
Date:
Subject: Re: EXPLAIN ANALYZE inside functions
Next
From: "Rodrigo De León"
Date:
Subject: Re: Aggregate question (Sum)