?
Solved

Division in MySQL

Posted on 2015-01-28
6
Medium Priority
?
318 Views
Last Modified: 2015-01-28
I have a MySQL query and I cant get the average right. I am dividing the total by the number of days and it is giving me a wierd number
Anyone see the issue?
SELECT job.company, 
       Sum(sfrentaldays + wfrentaldays) 
       AS RentalDays, 
       Sum(sfrentaldays * sfrentalrate) 
       AS SFBilling, 
       Sum(wfrentaldays * wfrentalrate) 
       AS WFBilling, 
       Sum(rigupcharge + rigdowncharge) 
       AS RigCharges, 
       Sum(jobrentalticket.toolredresscharge * jobrentalticket.numberoftools) 
       AS 
       SumOfToolRedressCharge, 
       Sum(sfinsurancedays * sfinsurancerate) 
       AS SFInsurance, 
       Sum(wfinsurancedays * wfinsurancerate) 
       AS WFInsurance, 
       Sum(servicemandays * servicemanrate) 
       AS ServiceCalls, 
       Sum(jobrentalticket.othercharges) 
       AS SumOfOthercharges, 
       Sum(sfstandbydays * sfstandbyrate) 
       AS SFStandby, 
       Sum(wfstandbydays * wfstandbyrate) 
       AS WFStandby, 
       Sum(creditdays * creditrate) 
       AS Credit, 
       Sum(( sfrentaldays * sfrentalrate ) + ( wfrentaldays * wfrentalrate ) + ( 
               rigupcharge + rigdowncharge ) + ( 
           jobrentalticket.toolredresscharge * 
           jobrentalticket.numberoftools ) + ( 
               sfinsurancedays * sfinsurancerate ) + ( 
           wfinsurancedays * wfinsurancerate ) 
           + ( servicemandays * servicemanrate ) + ( 
           jobrentalticket.othercharges ) + ( 
               sfstandbydays * sfstandbyrate ) + 
           ( wfstandbydays * wfstandbyrate ) - ( 
           creditdays * creditrate )) 
       AS Total, 
       Sum(( ( sfrentaldays * sfrentalrate ) + ( wfrentaldays * wfrentalrate ) + 
             ( 
                   rigupcharge + rigdowncharge ) + ( 
             jobrentalticket.toolredresscharge * 
             jobrentalticket.numberoftools ) + ( 
                   sfinsurancedays * sfinsurancerate ) + 
                   ( wfinsurancedays * wfinsurancerate ) + 
                   ( servicemandays * servicemanrate ) + 
             ( jobrentalticket.othercharges ) + 
                 ( 
                   sfstandbydays * sfstandbyrate ) + ( 
             wfstandbydays * wfstandbyrate ) 
             - ( 
                 creditdays * creditrate ) ) / (( sfrentaldays + wfrentaldays )) <---------------------------Division here!
       )AS 
       'Daily Average' 
FROM   job 
       INNER JOIN jobrentalticket 
               ON job.jobid = jobrentalticket.jobid 
WHERE  ( ( ( job.onlocationdatetime ) > '2014-01-01 12:00:00 AM' ) 
         AND ( ( job.onlocationdatetime ) < '2015-01-31 11:59:59 PM' ) ) 
GROUP  BY job.company 
HAVING (( ( job.company ) <> "test company" ))   

Open in new window

0
Comment
Question by:r3nder
  • 3
5 Comments
 
LVL 53

Expert Comment

by:Vitor Montalvão
ID: 40575629
I don't think we can help you, since:
We don't know the logic.
We don't know the values.
We don't know the returning result.
We don't know the expected result.
0
 
LVL 6

Author Comment

by:r3nder
ID: 40575645
I am asking you to look at this line and tell me if it is divided correctly? - you don't need logic just - is the division part correct
Sum(( ( sfrentaldays * sfrentalrate ) + ( wfrentaldays * wfrentalrate ) + 
             ( 
                   rigupcharge + rigdowncharge ) + ( 
             jobrentalticket.toolredresscharge * 
             jobrentalticket.numberoftools ) + ( 
                   sfinsurancedays * sfinsurancerate ) + 
                   ( wfinsurancedays * wfinsurancerate ) + 
                   ( servicemandays * servicemanrate ) + 
             ( jobrentalticket.othercharges ) + 
                 ( 
                   sfstandbydays * sfstandbyrate ) + ( 
             wfstandbydays * wfstandbyrate ) 
             - ( 
                 creditdays * creditrate ) ) / (( sfrentaldays + wfrentaldays )) <---------------------------Division here!
       )AS 
       'Daily Average' 

Open in new window

0
 
LVL 6

Accepted Solution

by:
r3nder earned 0 total points
ID: 40575667
Fixed - as usual people here are quick to make excuses when they dont know the problem was sum(value)/Sum(value) not Sum(value/value) as average
Sum(( ( sfrentaldays * sfrentalrate ) + ( wfrentaldays * wfrentalrate ) + 
             ( 
                   rigupcharge + rigdowncharge ) + ( 
             jobrentalticket.toolredresscharge * 
             jobrentalticket.numberoftools ) + ( 
                   sfinsurancedays * sfinsurancerate ) + 
                   ( wfinsurancedays * wfinsurancerate ) + 
                   ( servicemandays * servicemanrate ) + 
             ( jobrentalticket.othercharges ) + 
                 ( 
                   sfstandbydays * sfstandbyrate ) + ( 
             wfstandbydays * wfstandbyrate ) 
             - ( 
                 creditdays * creditrate ) )) /Sum( (( sfrentaldays + wfrentaldays )) <---------------------------Division here!
       )AS 
       'Daily Average' 

Open in new window

0
 
LVL 6

Author Comment

by:r3nder
ID: 40575804
I've requested that this question be closed as follows:

Accepted answer: 0 points for r3nder's comment #a40575667

for the following reason:

No one offered a solution - again
0
 
LVL 18

Expert Comment

by:Simon
ID: 40575688
1. if the datatype of the first expression (creditdays * creditrate) is an integer you may be getting integer dvision instead of decimal division

2. I think your expression is too long to easily understand without example data. Averaging aggregated values doesn't produce the same value as averaging the pre-aggregated values (i.e. it's not a weighted average).

A bigger brain may be able to help you, but for me, I'd find it much easier with some example data and/or your actual and expected results.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this blog, we’ll look at how improvements to Percona XtraDB Cluster improved IST performance.
When trying to connect from SSMS v17.x to a SQL Server Integration Services 2016 instance or previous version, you get the error “Connecting to the Integration Services service on the computer failed with the following error: 'The specified service …
Via a live example, show how to shrink a transaction log file down to a reasonable size.
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.

571 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question