В связи с вашим текущим дизайном таблицы вам нужно выполнять операции агрегирования над столбцами , а не строками.MySQL в целом имеет сильную поддержку агрегации по строкам / записям, но в меньшей степени по столбцам.Если вы собираетесь изменить дизайн своего стола, то функция AVG
уже может решить эту проблему, как только она появится «из коробки».Рассмотрите возможность сохранения вашей таблицы как:
Title | level | amount
Employee2 | 1 | NULL
Employee2 | 2 | 2000
Employee2 | 3 | 3000
Employee2 | 4 | 4000
То есть сохраняйте каждое значение уровня для каждого сотрудника в отдельной записи.Тогда вы можете легко вычислить правильное среднее значение, используя:
SELECT
title,
AVG(amount) AS avglevel
FROM test
GROUP BY
title;
Демо
Функция AVG
уже будет игнорировать значения NULL
по умолчанию, поэтому сумма будет нормализована по количеству записей, которое не включает в себя записи, имеющие NULL
.
Редактировать:
После настройки демонстрацииКажется, вы do хотите нормализовать среднее значение, используя все уровни, даже если сумма будет NULL
.В этом случае мы можем взять сумму, деленную на количество:
SELECT
title,
SUM(amount) / COUNT(*) AS avglevel
FROM test
GROUP BY
title;
Демо