Вывести среднее значение

DenVeroid

Новичок
Вывести среднее значение

есть стольбец purchase(double) в котором храняться числа

5,65
5,66
5,198
12
1,99
120
33,59
1,7

и нужно вывести среднее значение из всех записей

по началу я планировал сделать так
суммировать все найденные записи допустим найдено было 58, далее делим на 58, и получаем среднее значение

но тут в форуме наткнулся на функцию avg() которая занимается этим
попытался сделать с помощью её

PHP:
SELECT id, avg(purchase) FROM table GROUP BY id
ничего не выводит
пробую так

PHP:
SELECT avg(purchase) AS purchase  FROM table
вывело 13.359421052632, совсем что-то не то

решил на сайт зайти
http://dev.mysql.com/doc/mysql/ru/group-by-functions.html
там нашол пример

AVG(expr)
Возвращает среднее значение аргумента expr:

mysql> SELECT student_name, AVG(test_score)
FROM student
GROUP BY student_name;
кроме него, больше ничего ненашол примеров


может я что-то не так делаю?
 

Сергей123

Новичок
Ты всё говоришь?
Я набил поле дабл твоими значениями...
SELECT avg(purchase) AS purchase FROM table
даёт правильные 23,375
 

DenVeroid

Новичок
Бресь Сергей, у меня в базе сейчас 68 записей, то что выше числа я привёл, это одни из них, кстати а ты как выводил их?

я вывожу так

PHP:
$row=mysql_fetch_array($result);
echo $row['purchase'];
но это в принципе не важно

меня другое интересует, у тебя вывело 23,375 которго нет в том спсике что в первом посте выложил, а нужно из этого списка найти среднее, чтобы я мог потом получить id который тоже имеется в этой таблице имеющий auto_increment

или я что-то не то говорорю
 

Сергей123

Новичок
>> а ты как выводил их
я их вводил, зачем мне выводить

>> я вывожу так ...
к приведённому коду претензий нет :)

>> которго нет в том спсике
ну, это как бы среднее арифметическое (например, для чисел 1, 2 и 300 оно равно 101 - и ничего :)

-~{}~ 28.01.05 17:20:

Надо бы сформулировать поточнее задачу.
Например, "нужен id, соответствующий purchase, максимально близкому к среднему арифметическому из всех purchase".
 

DenVeroid

Новичок
Надо бы сформулировать поточнее задачу.
Например, "нужен id, соответствующий purchase, максимально близкому к среднему арифметическому из всех purchase".
вот-вот именно так и должно быть, видимо я нетак выразился, извеняюсь тогда

но как тогда это сделать? тоже наверное надо применять функцию avg() или с помощью других функции
 

Сергей123

Новичок
Оптимально не знаю как,
попробуй что-то вроде (AV возьми из первого запроса)

SELECT id, ABS(purchase-AV) AS diff
FROM table
ORDER BY diff
LIMIT 1
 

DenVeroid

Новичок
я всю базу очистил, оставил только те записи что привёл выше(тоесть значения)

и если я правельно понял, то вывожу таким образом

PHP:
$result = mysql_query("SELECT avg(purchase) AS purchase FROM table");
$row=mysql_fetch_array($result);
  $av = $row['purchase']; // выводит 4.0396

$result = mysql_query("SELECT id, ABS(purchase-$av) AS diff FROM table ORDER BY diff LIMIT 1");
$row=mysql_fetch_array($result);
  return $row['diff'];

результат: 1.1584


опять что-то не то
 

SelenIT

IT-лунатик :)
$row['diff'] - это минимальное значение разницы.

Чтобы получить соответствующее ему значение purchase, нужно что-то вроде
PHP:
$result = mysql_query("SELECT purchase FROM table ORDER BY ABS(purchase-$av) LIMIT 1");
$row=mysql_fetch_row($result);
  return $row[0];
 

Сергей123

Новичок
>> $av = $row['purchase']; // выводит 4.0396
Сколько? Ты ошибся где-то. 23 с чем-то должно быть.

>> опять что-то не то
ну, добавь в SELECT в моём запросе поле purchase и смотри $row['purchase']
 

DenVeroid

Новичок
извеняюсь что так долго не отвечал

вообщем если я правильно понял, то код должен быть таким


PHP:
$result = mysql_query("SELECT avg(purchase) AS purchase FROM table");
$row=mysql_fetch_array($result);
  $av = $row['purchase']; 

$result = mysql_query("SELECT purchase,id, ABS(purchase-$av) AS diff FROM table ORDER BY diff LIMIT 1");
$row=mysql_fetch_array($result);
echo   $row['purchase'];
проверял, вроде нормально выводит
 
Сверху