Solved

Division in MySQL

Posted on 2015-01-28
6
282 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
6 Comments
 
LVL 45

Expert Comment

by:Vitor Montalvão
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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:SimonAdept
Comment Utility
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Slowly Changing Dimension Transformation component in data task flow is very useful for us to manage and control how data changes in SSIS.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Via a live example, show how to backup a database, simulate a failure backup the tail of the database transaction log and perform the restore.

744 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

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now