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!