MySQL извлекает результаты, суммирует их

#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. Да, на секунду забыл о среднем значении, я поддержал его вопрос. Спасибо.