MySQL / 13. Статистические методы

Групповые описательные статистические показатели

Задача
Вы хотите получить описательные статистические показатели для каждой подгруппы множества наблюдений.

Решение
Применяйте агрегирующие функции, используя инструкцию GROUP BY для разбиения наблюдений на соответствующие группы.

Обсуждение
В предыдущем разделе было показано, как вычислять описательные статистические показатели для всего множества наблюдений таблицы testscore. Чтобы получить более точную информацию, можно использовать GROUP BY для распределения наблюдений по группам и вычисления статистических показателей для каждой группы в отдельности. Например, для испытуемых в таблице testscore приводятся такие параметры, как пол и возраст, так что можно вычислить статистические показатели для каждого возраста или пола (или сразу для того и другого):

По возрасту:

mysql> SELECT age, COUNT(score) AS n,
-> SUM(score) AS sum,
-> MIN(score) AS minimum,
-> MAX(score) AS maximum,
-> AVG(score) AS mean,
-> STD(score) AS 'std. dev.'
-> FROM testscore
-> GROUP BY age;

+----+---+-----+-----------+-----------+-------+-----------+
| age | n | sum | minimum | maximum | mean  | std. dev. |
+----+---+-----+----------+------------+-------+-----------+
| 5     | 4 | 22    | 4            | 7              | 5.5000 | 1.1180    |
| 6     | 4 | 27    | 4            | 9              | 6.7500 | 1.9203    |
| 7     | 4 | 30    | 6            | 9              | 7.5000 | 1.1180    |
| 8     | 4 | 32    | 6            | 10            | 8.0000 | 1.5811    |
| 9     | 4 | 35    | 7            | 10            | 8.7500 | 1.0897    |
+----+---+-----+----------+------------+-------+-----------+

По полу:

mysql> SELECT sex, COUNT(score) AS n,
-> SUM(score) AS sum,
-> MIN(score) AS minimum,
-> MAX(score) AS maximum,
-> AVG(score) AS mean,
-> STD(score) AS 'std. dev.'
-> FROM testscore
-> GROUP BY sex;

+----+---+-----+----------+-----------+--------+-----------+
| sex | n | sum | minimum | maximum | mean  | std. dev. |
+----+---+-----+----------+-----------+--------+-----------+
| M   | 10 | 71  | 4             | 9              | 7.1000 | 1.7000    |
| F    | 10 | 75  | 4             | 10            | 7.5000 | 1.8574    |
+----+---+-----+----------+------------+--------+----------+

По возрасту и полу:

mysql> SELECT age, sex, COUNT(score) AS n,
-> SUM(score) AS sum,
-> MIN(score) AS minimum,-> MAX(score) AS maximum,
-> AVG(score) AS mean,
-> STD(score) AS 'std. dev.'
-> FROM testscore
-> GROUP BY age, sex;

+-----+-----+---+------+---------+---------+--------+-----------+
| age | sex | n | sum | minimum | maximum | mean | std. dev. |
+----+-----+---+------+---------+---------+--------+-----------+
| 5    | M    | 2 | 9     | 4             | 5             | 4.5000 | 0.5000   |
| 5    | F     | 2 | 13   | 6             | 7             | 6.5000 | 0.5000   |
| 6    | M     | 2 | 17  | 8             | 9              | 8.5000 | 0.5000   |
| 6    | F     | 2 | 10   | 4             | 6              | 5.0000 | 1.0000  |
| 7    | M     | 2 | 14  | 6             | 8              | 7.0000 | 1.0000  |
| 7    | F     | 2 | 16   | 7            | 9               | 8.0000 | 1.0000  |
| 8    | M    | 2 | 15   | 6             | 9              | 7.5000 | 1.5000  |
| 8    | F     | 2 | 17   | 7             | 10            | 8.5000 | 1.5000  |
| 9    | M     | 2 | 16  | 7             | 9              | 8.0000 | 1.0000  |
| 9    | F     | 2 | 19   | 9             | 10            | 9.5000 | 0.5000  |
+----+-----+---+------+---------+---------+--------+-----------+

Статьи по MySQL на эту тему:

Вычисление линейной регрессии и коэффициентов корреляции
Генерация случайных чисел
Подсчет отсутствующих значений
Получение частотного распределения
Присваивание рангов

Вернуться в раздел: MySQL / 13. Статистические методы