calcul media cantitate in mysql
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
sterica
- Mesaje:285
calcul media cantitate in mysql
Salutare,
Am urmatorul tabel mysql:
Cod: Selectaţi tot
+------+-------------+-------+-------+
| cod | cantitate | luna | anul |
+------+-------------+-------+-------+
| 432 | 2 | 12 | 2012 |
| 432 | 4 | 11 | 2014 |
| 569 | 1 | 9 | 2016 |
| 569 | 2 | 7 | 2015 |
| 569 | 3 | 2 | 2017 |
+------+-------------+-------+-------+
Cum pot calcul mediana cantitatii pentru fiecare produs:
Cod: Selectaţi tot
+-------+------------+
| COD | MEDIANA |
+-------+------------+
| 432 | 3 |
| 569 | 2 |
+-------+------------+
Multumesc!
MarPlo
Mesaje:4343
Incearca cu AVG() si GROUP BY:
Cod: Selectaţi tot
SELECT cod, AVG(cantitate) AS media FROM tabel GROUP BY cod
sterica
Mesaje:285
functioneaza, insa nu mi-am dat seama de un lucru. Mai jos este tot o parte din tabela mysql cu valorile expuse altfel.
Cod: Selectaţi tot
+-----+------+------+------+
| cod | cant | luna | anul |
+-----+------+------+------+
| 432 | 1 | 10 | 2012 |
| 432 | 2 | 10 | 2012 |
| 432 | 4 | 10 | 2012 |
| 432 | 2 | 3 | 2012 |
| 432 | 3 | 2 | 2016 |
| 432 | 2 | 1 | 2016 |
| 432 | 8 | 8 | 2017 |
+-----+------+------+------+
+------+---+---+---+---+---+---+---+---+---+----+----+----+-------+
| ANUL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | TOTAL |
+------+---+---+---+---+---+---+---+---+---+----+----+----+-------+
| 2012 | | | 2 | | | | | | 7 | | | | 9 |
| 2016 | 2 | 3 | | | | | | | | | | | 5 |
| 2017 | | | | | | | | 8 | | | | | 8 |
+------+---+---+---+---+---+---+---+---+---+----+----+----+-------+
MEDIANA (5,8,9) = 8
432 -> 8
Mediana pe care doresc sa o fac este de forma aceasta:
prima data adun valorile pentru fiecare luna in parte din fiecare an dupa care fac mediana totalurilor pentru fiecare an.
Multumesc!
MarPlo
Mesaje:4343
Inainte de GROUP BY foloseste conditia WHERE (luna=valoare apoi an=valoare) pentru luna, apoi anul care vrei.
Cod: Selectaţi tot
SELECT cod, AVG(cantitate) AS media FROM tabel WHERE luna=10 GROUP BY cod
Apoi faci in php operatiunile dorite cu rezultatul primit.
sterica
Mesaje:285
ma tot invart in jurul cozii si nu reusesc sa ajung la rezultatul dorit, am interogat cu:
Cod: Selectaţi tot
SELECT cod, AVG(cantitate) AS media FROM tabel WHERE luna=10 GROUP BY cod
insa nu primesc niciun rezultat
daca folosesc:
Cod: Selectaţi tot
SELECT cod, sum(cantitate) from tabel group by anul
cu acest query imi rezulta o desfasurare pe fiecare an de forma:
432 - 2012 - 9
432 - 2016 - 5
432 - 2017 - 8
de aici cum pot pune rezultatul intr-un array de forma ["432"=>"9,5,8", "xxx"=>"x,y,z,w"]
multumesc!
MarPlo
Mesaje:4343
Vezi daca iti e de folos acest cod php:
Cod: Selectaţi tot
$res =[
['cod'=>432, 'an'=>2012, 'suma'=>9],
['cod'=>432, 'an'=>2016, 'suma'=>5],
['cod'=>432, 'an'=>2017, 'suma'=>8],
['cod'=>569, 'an'=>2016, 'suma'=>6],
['cod'=>569, 'an'=>2017, 'suma'=>9],
];
$by_cod =[];
foreach($res as $row){
if(!isset($by_cod[$row['cod']])) $by_cod[$row['cod']]='';
$by_cod[$row['cod']] .= $row['suma'].',';
}
var_export($by_cod); //array(432=>'9,5,8,', 569=> '6,9,',)
sterica
Mesaje:285
MarPlo, multumesc mult de ajutor!