Solved

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

Posted on 2000-05-15
4
352 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 100 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

It’s been over a month into 2017, and there is already a sophisticated Gmail phishing email making it rounds. New techniques and tactics, have given hackers a way to authentically impersonate your contacts.How it Works The attack works by targeti…
Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …

726 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