1. Bases de dades relacionals

1.9. Consultes avançades: agrupacions

Mitjançant el desglossament de dades d’una taula, en funció d’algun camp concret, podem calcular estadístiques sobre cada categoria. L’ordre GROUP BY permet realitzar agrupacions de les dades de les taules segons els criteris que establim, i és possible combinar aquestes classificacions amb operadors d’agregació com COUNT,  MAX,  MIN,  AVG o  SUM.

SELECT camp1, camp2,..., campn FROM taula GROUP BY atribut;

Per exemple, demanem les espècies presents a la nostra base de dades:

mysql> SELECT especie FROM gens GROUP BY especie;

+-----------------+
| especie         |
+-----------------+
| D. melanogaster |
| H. sapiens      |
+-----------------+
2 rows in set (0.00 sec)

Posteriorment, podem comptar el nombre exacte d’exemples de cada espècie:

mysql> SELECT especie,COUNT(*) FROM gens GROUP BY especie;

+-----------------+----------+
| especie         | COUNT(*) |
+-----------------+----------+
| D. melanogaster |       2  |
| H. sapiens      |       2  |
+-----------------+----------+
2 rows in set (0.00 sec)

Ara obtenim les estadístiques bàsiques sobre la longitud dels gens:

mysql> SELECT especie, cromosoma, inici, final, final-inici
    -> FROM gens;

+-----------------+-----------+-----------+-----------+-------------+
| especie         | cromosoma |   inici   |   final   | final-inici |
+-----------------+-----------+-----------+-----------+-------------+
| D. melanogaster | chr3R     |  20477248 |  20479098 |        1850 |
| D. melanogaster | chr2L     |    476437 |    479046 |        2609 |
| H. sapiens      | chr12     | 121416548 | 121440312 |       23764 |
| H. sapiens      | chr8      | 128748314 | 128753678 |        5364 |
+-----------------+-----------+-----------+-----------+-------------+
4 rows in set (0.00 sec)

mysql> SELECT especie, AVG(final-inici), MIN(final-inici),
    -> MAX(final-inici) FROM gens GROUP BY especie;

+-----------------+------------------+------------------+------------------+
| especie         | AVG(final-inici) | MIN(final-inici) | MAX(final-inici) |
+-----------------+------------------+------------------+------------------+
| D. melanogaster |        2229.5000 |             1850 |             2609 |
| H. sapiens      |       14564.0000 |             5364 |            23764 |
+-----------------+------------------+------------------+------------------+
2 rows in set (0.00 sec)