|
|
|
| Подскажите такую вещь.
Допустим есть таблица с данными:
id__|_1_|_1_|_3_|
o1_|_1_|_5_|_2_|
o2_|_2_|_0_|_0_|
o3_|_1_|_3_|_2_|
Как мне получить Среднее арифметическое столбца "o1" с учетом группировки по "id"? | |
|
|
|
|
|
|
|
для: maxfade
(29.07.2008 в 11:06)
| |
SELECT id, AVG(o1) AS a FROM table GROUP BY id
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(29.07.2008 в 12:47)
| |
$sql = "SELECT id, avg(1 - (o1 + o2 +o3)*0.3) AS sr FROM table GROUP BY id";
|
В результате "1 - (o1 + o2 +o3)*0.3" могуть появляться значения со знаком " - ", как данные значения приравнять к нулю?
Т.е. сделать уловие, если значение < 0 , то значение = 0.
Но данное условие необходимо вставить в запрос. | |
|
|
|
|
|
|
|
для: maxfade
(29.07.2008 в 13:02)
| | Вы бы написали попдробнее, что именно Вы хотите вычислить. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 13:21)
| | Необходимо вычислить сумму o1, o2, o3 в строках, и из этих сумм вычислить среднее значение.
Если применительно к табличке из первого поста, то так(группировка по id):
summ1 = 1 - (o1 + o2 + o3)*0.3 = 1 - 4*0.3 = -0.2
summ2 = 1 - (5 + 0 + 3 )*0.3 = -1,4
|
Далее взять среднее от summ1 и summ2, т.е. должно получиться -0,8
Плюс к этому в запросе поставить условие на то, если summ1 или summ2 меньше нуля, то summ1 или summ2 приравнивается к нулю.
Т.е. если, это уловие применить к summ1 и summ2 из применра выше, то среднее получиться = 0.
Последнее необходимо для того, чтобы summ не могло принимать значения ниже нуля. | |
|
|
|
|
|
|
|
для: maxfade
(29.07.2008 в 14:00)
| | [поправлено модератором]
спасибо. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 22:47)
| | Все же жду ответа и помощи :) | |
|
|
|
|
|
|
|
для: maxfade
(30.07.2008 в 08:15)
| |
SELECT id, pow(coalesce(sqrt(avg(1 - (o1 + o2 +o3)*0.3)), 0), 2) AS sr FROM table GROUP BY id
|
| |
|
|
|
|
|
|
|
для: Trianon
(30.07.2008 в 10:46)
| | Это уже приближено к правде, но все-таки подсчитывается с погрешность, причем достаточно большой...
Есть еще варианты? | |
|
|
|
|
|
|
|
для: maxfade
(30.07.2008 в 14:09)
| | Вычисляя таким образом среднее значение, Вы еще что-то будете говорить про погрешность?! | |
|
|
|
|
|
|
|
|
для: mihdan
(30.07.2008 в 15:13)
| | *0.3 - коэффициент, который умножается на сумму o1, o2, o3 | |
|
|
|
|
|
|
|
для: maxfade
(30.07.2008 в 15:15)
| | Вас просили внятно объяснить, что именно Вам нужно посчитать.
Что именно, а не как именно.
Про среднее арифметическое столбцов, которые Вы почему-то назвали и изобразили строками, Вы сказали. Про коэффициенты - ни слова. | |
|
|
|
|
|
|
|
для: maxfade
(30.07.2008 в 15:15)
| | > *0.3 - коэффициент, который умножается на сумму o1, o2, o3
Вы в школе не учились :))) | |
|
|
|
|
|
|
|
для: BinLaden
(30.07.2008 в 15:27)
| | Объясню еще раз подробно:
Таблица:
id__|_o1_|_o2_|_o3_|
1___|_1_|__5_|__2_|
1___|_2_|__0_|__0_|
2___|_1_|__3_|__2_|
Необходимо, в запросе посчитать :
1 - (o1 + o2 + o3)*0.3 - это сделать легко...
Где oх.... - значения из таблицы MySQL, 0,3 - произвольный коэффициент
К этому значению применить условие, что если оно меньше нуля, то оно приравнивается к нулю.
Далее, взять посчитанные значения в которых id одинаковые и посчитать среднее среди этих значений. | |
|
|
|
|
|
|
|
для: maxfade
(30.07.2008 в 16:02)
| | >1 - (o1 + o2 + o3)*0.3 - это сделать легко...
SELECT 1 - (o1 + o2 + o3)*0.3 as res
FROM tbl
|
>
>Где oх.... - значения из таблицы MySQL, 0,3 - произвольный коэффициент
>
>К этому значению применить условие, что если оно меньше нуля, то оно приравнивается к нулю.
>
SELECT IF( 1 < (o1 + o2 + o3)*0.3, 0, 1 < (o1 + o2 + o3)*0.3) as res
FROM tbl
|
>Далее, взять посчитанные значения в которых id одинаковые и посчитать среднее среди этих значений.
SELECT id, AVG(IF( 1 < (o1 + o2 + o3)*0.3, 0, 1 - (o1 + o2 + o3)*0.3)) as avgres
FROM tbl
GROUP BY id
|
| |
|
|
|
|
|
|
|
для: Trianon
(30.07.2008 в 16:07)
| | Большое спасибо. | |
|
|
|