To calculate a standard deviation based on n-1 degrees of freedom instead
mysql>
mysql> CREATE TABLE testscore
-> (
-> subject INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> age INT UNSIGNED NOT NULL,
-> sex ENUM('M','F') NOT NULL,
-> score INT,
-> PRIMARY KEY (subject)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> INSERT INTO testscore (age,sex,score)
-> VALUES
-> (5,'M',5),
-> (5,'M',4),
-> (5,'F',6),
-> (5,'F',7),
-> (6,'M',8),
-> (6,'M',9),
-> (6,'F',4),
-> (6,'F',6),
-> (7,'M',8),
-> (7,'M',6),
-> (7,'F',9),
-> (7,'F',7),
-> (8,'M',9),
-> (8,'M',6),
-> (8,'F',7),
-> (8,'F',10),
-> (9,'M',9),
-> (9,'M',7),
-> (9,'F',10),
-> (9,'F',9)
-> ;
Query OK, 20 rows affected (0.00 sec)
Records: 20 Duplicates: 0 Warnings: 0
mysql>
mysql> SELECT subject, age, sex, score FROM testscore ORDER BY subject;
+---------+-----+-----+-------+
| subject | age | sex | score |
+---------+-----+-----+-------+
| 1 | 5 | M | 5 |
| 2 | 5 | M | 4 |
| 3 | 5 | F | 6 |
| 4 | 5 | F | 7 |
| 5 | 6 | M | 8 |
| 6 | 6 | M | 9 |
| 7 | 6 | F | 4 |
| 8 | 6 | F | 6 |
| 9 | 7 | M | 8 |
| 10 | 7 | M | 6 |
| 11 | 7 | F | 9 |
| 12 | 7 | F | 7 |
| 13 | 8 | M | 9 |
| 14 | 8 | M | 6 |
| 15 | 8 | F | 7 |
| 16 | 8 | F | 10 |
| 17 | 9 | M | 9 |
| 18 | 9 | M | 7 |
| 19 | 9 | F | 10 |
| 20 | 9 | F | 9 |
+---------+-----+-----+-------+
20 rows in set (0.00 sec)
mysql>
mysql> SELECT
-> @n := COUNT(score),
-> @sum := SUM(score),
-> @ss := SUM(score*score)
-> FROM testscore;
+--------------------+--------------------+-------------------------+
| @n := COUNT(score) | @sum := SUM(score) | @ss := SUM(score*score) |
+--------------------+--------------------+-------------------------+
| 20 | 146 | 1130 |
+--------------------+--------------------+-------------------------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT @var := ((@n * @ss) - (@sum * @sum)) / (@n * (@n - 1));
+--------------------------------------------------------+
| @var := ((@n * @ss) - (@sum * @sum)) / (@n * (@n - 1)) |
+--------------------------------------------------------+
| 3.378947368 |
+--------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SQRT(@var);
+------------------+
| SQRT(@var) |
+------------------+
| 1.83819133062911 |
+------------------+
1 row in set (0.00 sec)
mysql>
mysql> drop table testscore;
Query OK, 0 rows affected (0.00 sec)
Related examples in the same category