Subject | Re: [firebird-support] Doubt Regarding Sum() Function |
---|---|
Author | Daniel Rail |
Post date | 2010-09-15T11:33:04Z |
Hi,
At September-15-10, 1:01 AM, Vishal Tiwari wrote:
already mentioned in another thread.
GROUP BY, as I have it below:
Select BM.Book_Name, Book_Price, COPY_SOLD
from Book_Master BM Join Book_Details BD On BM.Book_Name = BD.Book_Name
Where BD.YearMonth = '200904' Group By BM.Book_Name
You will see the result set that would be used to calculate the SUM
columns of your query.
the FROM clause), but this is only available in Firebird 2+.
i.e.:
Select BM.Book_Name,
BM.Book_Price,
BD.COPY_SOLD
from (select Book_Name, Sum(Book_Price) as Book_Price
from Book_Master
group by BookName) BM
Join (select Book_Name, Sum(COPY_SOLD) as COPYSOLD
from Book_Details
where Book_Details.YearMonth = '200904'
group by Book_Name) BD
On BM.Book_Name = BD.Book_Name
Order by BM_Book_Name
The other option would be to use an EXECUTE BLOCK statement, you'll
find the information in the release notes.
--
Best regards,
Daniel Rail
Senior Software Developer
ACCRA Solutions Inc. (www.accra.ca)
ACCRA Med Software Inc. (www.filopto.com)
At September-15-10, 1:01 AM, Vishal Tiwari wrote:
>The above result is expected given the query.
> I am putting my doubt again, sorry for that.
> I have a table as follows:
>
> Table Name : Book_Master
> Book_Name Book_Price
> ABC 1250.00
> LMN 5698.00
> PQR 1524.00
>
> Table Name : Book_Details
> YearMonth Sold_On_Date Book_Name Copy_Sold
> 200904 01/04/2009 ABC 565
> 200904 05/04/2009 PQR 986
> 200904 05/04/2009 LMN 120
> 200904 11/04/2009 ABC 565
> 200904 25/04/2009 PQR 986
> 200904 15/04/2009 LMN 120
> SQL:
> Select BM.Book_Name, Sum(Book_Price) As Book_Price, Sum(COPY_SOLD) As COPY_SOLD
> from Book_Master BM Join Book_Details BD On BM.Book_Name = BD.Book_Name
> Where BD.YearMonth = '200904' Group By BM.Book_Name
>
> I get the out put as:
>
>
> Book_Name Book_Price Copy_Sold
> ABC 2500.00 1130
> LMN 11396.00 240
> PQR 3048.00 1972
>This would require that the query would be written differently, as I
> But Required result is as follows:
>
> Book_Name Book_Price Copy_Sold
> ABC 1250.00 1130
> LMN 5698.00 240
> PQR 1524.00 1972
already mentioned in another thread.
> I thought that "Book_Price" column value will be displayed as itAs expected. And, if you would run the query without the SUM and
> is available in the "Book_Master" table and the records will be
> displayed only for those books which are having entries in "Book_Details" too.
>
> But it is comming as Book_Price * No. of records exist in Book_Detauils table.
GROUP BY, as I have it below:
Select BM.Book_Name, Book_Price, COPY_SOLD
from Book_Master BM Join Book_Details BD On BM.Book_Name = BD.Book_Name
Where BD.YearMonth = '200904' Group By BM.Book_Name
You will see the result set that would be used to calculate the SUM
columns of your query.
>What you want would be to use derived tables(essentially subqueries in
> If I would like to use the Sum() function for Book_Price too then
> how should I use, one way is Sum(Distinct(EM.Book_Price)) but in
> future in some cases where I need to have multiple records in two
> different table I may wish to get sum of perticular column from one
> table and some of perticular column from other table using join,
> then that time I would get wrong result.
the FROM clause), but this is only available in Firebird 2+.
i.e.:
Select BM.Book_Name,
BM.Book_Price,
BD.COPY_SOLD
from (select Book_Name, Sum(Book_Price) as Book_Price
from Book_Master
group by BookName) BM
Join (select Book_Name, Sum(COPY_SOLD) as COPYSOLD
from Book_Details
where Book_Details.YearMonth = '200904'
group by Book_Name) BD
On BM.Book_Name = BD.Book_Name
Order by BM_Book_Name
The other option would be to use an EXECUTE BLOCK statement, you'll
find the information in the release notes.
--
Best regards,
Daniel Rail
Senior Software Developer
ACCRA Solutions Inc. (www.accra.ca)
ACCRA Med Software Inc. (www.filopto.com)