Как найти среднее значение определенного столбца в Access 2003? - PullRequest
1 голос
/ 27 февраля 2012

Использование: Access 2003

У меня есть таблица с не менее чем 250 записями данных. Моя цель - найти среднее значение для некоторых столбцов (например, среднее значение для столбца TotalNumSuverys). Простое математическое уравнение, такое как SUM / (Количество получателей сюрпризов), не будет работать, потому что в зависимости от конкретного столбца общее количество записей различается.

Как мне получить среднее значение по столбцу?

(Я попробовал агрегат «Avg» в представлении запросов и обнаружил, что он усредняет строку, а не столбец.)

Есть ли какой-нибудь SQL, который позволял бы делать что-то вроде "цикла ForEach"?

- Я очень новичок в этом, извините!

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Функция Avg() дает вам среднее (среднее арифметическое) только ненулевых значений в столбце. Или, в вашем примере, значение Null будет исключено как из «SUM», так и из «Number of survery takeers».

Access 'конструктор запросов может сначала сбить с толку (насколько я помню). Возможно, для вас было бы более разумно, если бы вы переключились на SQL View и набрали пример оператора, используя этот шаблон ...

SELECT Avg(MyColumn) AS AvgOfMyColumn
FROM MyTable;

... подставляя имя столбца для MyColumn и имя таблицы для MyTable. Затем запустите запрос (Datasheet View), чтобы увидеть, что он вам дает. Затем вы можете переключиться обратно в режим просмотра, чтобы посмотреть, как он там представлен.

Другие агрегатные функции, не только Avg(), также игнорируют нулевые значения. Например, Count(MyColumn) даст вам количество строк, в которых MyColumn не равен NULL. [Если вы хотите подсчитать количество всех строк независимо от того, содержат ли отдельные столбцы значение Null, используйте Count(*)] И Sum(MyColumn) добавит только ненулевые значения MyColumn.

0 голосов
/ 29 февраля 2012

если по какой-то причине Avg() не работает для вас, вы можете использовать основной способ:

Dim rSet As DAO.Recordset, cnt As Integer, sum As Integer, avg As Variant
rSet = CurrentDb.OpenRecordset ("Select Sum(MyColumn), Count(MyKey) from MyTable")
sum  = rSet.Fiels(0)
cnt  = rSet.Fiels(1)
avg = sum/cnt
MsgBox "The average is " & avg
...