Средневзвешенный расчет в MySQL?
в настоящее время я использую следующий запрос, чтобы получить некоторые цифры:
SELECT gid, count(gid), (SELECT cou FROM size WHERE gid = infor.gid)
FROM infor
WHERE id==4325
GROUP BY gid;
выход, который я получаю на моем текущем этапе, следующий:
+----------+-----------------+---------------------------------------------------------------+
| gid | count(gid) | (SELECT gid FROM size WHERE gid=infor.gid) |
+----------+-----------------+---------------------------------------------------------------+
| 19 | 1 | 19 |
| 27 | 4 | 27 |
| 556 | 1 | 556 |
+----------+-----------------+---------------------------------------------------------------+
Я пытаюсь вычислить средневзвешенное значение, т. е.
(1*19+4*27+1*556)/(19+27+556)
есть ли способ сделать это с помощью одного запроса?
2 ответов
использование:
SELECT SUM(x.num * x.gid) / SUM(x.cou)
FROM (SELECT i.gid,
COUNT(i.gid) AS num,
s.cou
FROM infor i
LEFT JOIN SIZE s ON s.gid = i.gid
WHERE i.id = 4325
GROUP BY i.gid) x
вы можете поместить исходный запрос в качестве подзапроса и суммировать записи. Я не мог проверить это, поскольку у меня нет набора данных, который вы делаете, но он должен работать в теории;)
SELECT SUM(gid)/SUM(weights) AS calculated_average FROM (
SELECT gid, (COUNT(gid) * gid) AS weights
FROM infor
WHERE id = 4325
GROUP BY gid);