?
Solved

AVG() or SUM() in different fields with nulls

Posted on 2000-05-15
4
Medium Priority
?
355 Views
Last Modified: 2012-06-21
I have used Avg() to calculate the average of valus in a single field that may contain null values. Now I want to calculate the average of 5 values that are in different fields. It is possible that some of these values can be null and I will not want to include these in the average. In this case when I try to add the 5 values when one of them is null I come up with a null value. Can anyone help me wiht this? Thanks in advance.

Susan
0
Comment
Question by:susantrider
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 2

Expert Comment

by:Simonac
ID: 2811590
u can use IsNull(FIELD) to include it or not in the AVG(), something like:

For each field in fields
   if not IsNull(field)
      SUM = SUM + field
      intNbrValues = intNbrValues + 1
   end if
next

  AVG = SUM/intNbrValues
0
 
LVL 10

Accepted Solution

by:
paasky earned 400 total points
ID: 2811628
Hello Susan

I think you need own function to do the calculation. Then use it with your query. The function could look like this (add this into your global Module):

Public Function MyAVG(field1, field2, field3, field4, field5) As Variant
Dim AvgCount As Byte
   
    ' assume all fields contain value
    AvgCount = 5
   
    ' minus 1 if field1..5 is null
    AvgCount = AvgCount + IsNull(field1)
    AvgCount = AvgCount + IsNull(field2)
    AvgCount = AvgCount + IsNull(field3)
    AvgCount = AvgCount + IsNull(field4)
    AvgCount = AvgCount + IsNull(field5)
   
    If AvgCount > 0 Then
        MyAVG = (Nz(field1, 0) + Nz(field2, 0) + Nz(field3, 0) + Nz(field4, 0) + Nz(field5, 0)) / AvgCount
    End If
   
End Function

Test results using Debug Window:
? MyAVG(null,null,null,2,4)
 3

? MyAVG(5,5,5,5,null)
 5

Usage example with query:

SELECT MyAVG(Number1, Number2, Number3, Number4, Number5) AS Average
FROM tblNumbers;

Hope this helps,
Paasky
Usage with query:
0
 

Author Comment

by:susantrider
ID: 2811722
Paasky, you have helped me agian. Thanks. The other answer was also helpful. Thank you!
0
 
LVL 10

Expert Comment

by:paasky
ID: 2811753
Always happy to help you Susan. :o)

Best regards,
Paasky
0

Featured Post

Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Question has a verified solution.

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

Phishing attempts can come in all forms, shapes and sizes. No matter how familiar you think you are with them, always remember to take extra precaution when opening an email with attachments or links.
You need to know the location of the Office templates folder, so that when you create new templates, they are saved to that location, and thus are available for selection when creating new documents.  The steps to find the Templates folder path are …
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Suggested Courses

777 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