#mysql
#mysql
Вопрос:
я пытаюсь суммировать значения из одной записи (A), а затем добавить их к суммарным значениям из другой записи (B), интересно, возможно ли это?
ID ValueA ValueB ValueC
1 5 5 5
2 1 2 3
3 6 3 3
Итак, что я пытаюсь здесь сделать, это взять ValueA, ValueB и ValueC для каждой записи, сложить их, чтобы я мог получить среднее значение.
Итак, для идентификатора 1 у меня будет 15 делений на 3 = 5
ID 2 у меня будет 6 делений на 3 = 2
ID 3 у меня будет 12 делений на 3 = 4
затем мне нужно будет сложить все 3 из них, я получу 11 и разделю его на 3 и получу среднее значение 3,67.
Мой запрос
$result = mysql_query('SELECT * FROM teams WHERE UPPER(team)=UPPER("'.$team.'")');
while($row = mysql_fetch_array($result))
{
$ValueA = $row['ValueA'];
$ValueB = $row['ValueB'];
$ValueC = $row['ValueC'];
$All = $ValueA $ValueB $ValueC;
}
Я знаю, как получить сумму 1 записи, но не уверен, как я могу сделать это со всеми 3 записями. любая помощь?
Редактировать: Извините, я забыл добавить, что сначала мне нужно будет сделать среднее значение для каждой записи.
Ответ №1:
SELECT AVG(valueA valueB valueC)
FROM teams
должно сработать. Поскольку вы выбираете все записи из таблицы, требуется группировка.
Обратите внимание, что по умолчанию MySQL использует параметры сортировки без учета регистра в таблицах, поэтому ваш UPPER(team)
бизнес может не потребоваться — удаление вызовов функций позволит применять индексы (если таковые имеются) к этому конкретному совпадению.
Комментарии:
1. Спасибо за ответ, но я только что обновил свой пост, я забыл, что сначала я должен сделать среднее значение для каждой записи, прежде чем делать среднее значение по сумме каждой записи.
2. И разделите это на 3, чтобы получить результат по всем столбцам (то, что OP имеет значение 3.67).
3.
AVG((valueA valueB valueC) / 3)
в этом случае.4. но это должна быть сумма каждой записи, а затем разделить на количество записей, которые у нее есть?
5. среднее значение автоматически выполнит «сумму всех записей, деленную на количество строк». итак, в вашем случае с 3 строками это будет
(row1 row2 row3) / 3
Ответ №2:
Вы можете суммировать функции SQL вместе:
SELECT
(sum(ValueA) sum(ValueB) sum(ValueC)) / 3 as average
FROM
<your table>
WHERE
<your conditions>
Ответ №3:
SELECT SUM(ValueA ValueB ValueC) / (SELECT COUNT(*) FROM Teams)
FROM Teams
Это будет среднее значение, которое вы ищете.
Комментарии:
1. Вам не нужны два выбора для этого. Вы можете либо разделить с помощью другой функции aggregation (
count(*)
), либо поступить так, как это сделал Марк Б. и использовать среднее значение.2. Да, на секунду забыл о среднем значении, я поддержал его вопрос. Спасибо.