Fonction d'agrégation de table MySQL

avant-propos

        Bonjour à tous, cet article présente quelques fonctions d'agrégation couramment utilisées dans MySQL. Qu'est-ce qu'une fonction d'agrégation ? Je crois que les amis qui voient ce terme pour la première fois sont assez confus. Par exemple, en parlant du nombre de données dans les statistiques table, vous pouvez utiliser la fonction COUNT fournie dans MySQL pour faire des statistiques. Voyons quelles fonctions d'agrégation sont disponibles et comment les utiliser.

1. Fonctions d'agrégation

Tout d'abord, obtenez une compréhension générale des fonctions d'agrégation disponibles, puis apprenez chaque fonction d'agrégation en combinaison avec des cas spécifiques :

cas:

1. Compter le nombre d'élèves dans la classe

-- 使用 * 做统计,不受 NULL 影响

mysql> select* from student;
+----+--------+----+---------+
| id | name   | sn | qq      |
+----+--------+----+---------+
|  1 | 张三   |  1 | 123456  |
|  2 | 李四   |  2 | 1234578 |
|  3 | 王五   |  3 | 234567  |
|  5 | 张飞   |  6 | 2467764 |
|  6 | 刘备   |  4 | NULL    |
+----+--------+----+---------+
5 rows in set (0.00 sec)
mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.01 sec)
-- 使用表达式做统计
mysql> select count(1) from student;
+----------+
| count(1) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

2. Comptez le nombre de numéros QQ collectés par la classe

-- NULL 不会计入结果
mysql> select count(qq) from student;
+-----------+
| count(qq) |
+-----------+
|         4 |
+-----------+
1 row in set (0.00 sec)

3. Comptez le nombre de notes en mathématiques à cet examen

mysql> select* from exam_result;
+----+-----------+---------+------+---------+
| id | name      | chinese | math | english |
+----+-----------+---------+------+---------+
|  8 | 唐三藏    |      67 |   98 |      56 |
|  9 | 孙悟空    |      87 |   78 |      77 |
| 10 | 猪悟能    |      88 |   98 |      90 |
| 11 | 曹孟德    |      82 |   84 |      67 |
| 12 | 刘玄德    |      55 |   85 |      45 |
| 13 | 孙权      |      70 |   73 |      78 |
| 14 | 宋公明    |      75 |   65 |      30 |
+----+-----------+---------+------+---------+
--count(math)统计的是全部的成绩
mysql> select count(math) from exam_result;
+-------------+
| count(math) |
+-------------+
|           7 |
+-------------+
1 row in set (0.00 sec)
--count(distinct math)统计的是去重的成绩
mysql> select count(distinct math) from exam_result;
+----------------------+
| count(distinct math) |
+----------------------+
|                    6 |
+----------------------+
1 row in set (0.00 sec)

4. Scores mathématiques statistiques

mysql> select sum(math) from exam_result;
+-----------+
| sum(math) |
+-----------+
|       581 |
+-----------+
1 row in set (0.00 sec)

5. Note moyenne statistique

mysql> select avg(math+english+chinese) 平均总分 from exam_result;
+--------------------+
| 平均总分           |
+--------------------+
| 221.14285714285714 |
+--------------------+
1 row in set (0.00 sec)

6. Renvoyez le score le plus élevé en anglais

mysql> select max(english) from exam_result;
+--------------+
| max(english) |
+--------------+
|           90 |
+--------------+
1 row in set (0.01 sec)

7. Retour > 70 points au-dessus du score mathématique minimum


mysql> select min(math) from exam_result where math > 70;
+-----------+
| min(math) |
+-----------+
|        73 |
+-----------+
1 row in set (0.00 sec)

2. Statistiques du groupe

L'utilisation connexe des fonctions d'agrégation est présentée ci-dessus. Certains amis peuvent trouver étrange que les statistiques de groupe apparaissent soudainement ici. Ne vous inquiétez pas, comprenons ce que sont les statistiques de groupe. 

Le but des statistiques de regroupement est de réaliser l'utilisation des fonctions d'agrégation, donc le regroupement est un moyen, et le but ultime est de réaliser des statistiques d'agrégation. Il se peut que ce ne soit pas intuitif à comprendre pour tout le monde. Illustrons par des cas réels :

Il y a trois tables ici :

Table des employés EMP Table
des départements DEPT Table
des niveaux de salaire SALGRADE

tableau emp :

 tableau des profondeurs :

table salgrade :

 

On peut observer à partir du premier tableau qu'il y a beaucoup d'informations d'employés dans le tableau, chaque employé a des informations différentes, mais plusieurs employés ont la même information, qui est le numéro de service de l'employé :

En ce moment, il y a une demande : afficher le salaire moyen et le salaire final de chaque département

Si vous utilisez directement la fonction d'agrégation pour les statistiques, vous constaterez que les exigences ci-dessus ne peuvent pas être satisfaites. À ce stade, vous devez d'abord regrouper, puis utiliser la fonction d'agrégation correspondante pour compter. Le regroupement mentionné ci-dessus est un signifie, et le but réel est Afin d'obtenir des statistiques agrégées.

Examinons de plus près comment effectuer des statistiques de groupe :

grammaire:

select column1, column2, .. from table group by column;

cas:

Affichez les salaires moyens et maximums pour chaque département :

mysql> select deptno,max(sal) 最高,avg(sal) 平均 from emp group by deptno;
+--------+---------+-------------+
| deptno | 最高    | 平均        |
+--------+---------+-------------+
|     10 | 5000.00 | 2916.666667 |
|     20 | 3000.00 | 2175.000000 |
|     30 | 2850.00 | 1566.666667 |
+--------+---------+-------------+
3 rows in set (0.00 sec)

Indiquez les salaires moyen et minimum pour chaque emploi dans chaque secteur :

mysql> select deptno,job,avg(sal) 平均,min(sal) 最低 from emp group by deptno,job;
+--------+-----------+-------------+---------+
| deptno | job       | 平均        | 最低    |
+--------+-----------+-------------+---------+
|     10 | CLERK     | 1300.000000 | 1300.00 |
|     10 | MANAGER   | 2450.000000 | 2450.00 |
|     10 | PRESIDENT | 5000.000000 | 5000.00 |
|     20 | ANALYST   | 3000.000000 | 3000.00 |
|     20 | CLERK     |  950.000000 |  800.00 |
|     20 | MANAGER   | 2975.000000 | 2975.00 |
|     30 | CLERK     |  950.000000 |  950.00 |
|     30 | MANAGER   | 2850.000000 | 2850.00 |
|     30 | SALESMAN  | 1400.000000 | 1250.00 |
+--------+-----------+-------------+---------+
9 rows in set (0.00 sec)

Affichez les départements avec un salaire moyen inférieur à 2000 et leur salaire moyen :

Idée de réalisation :

a. Calculez le salaire moyen de chaque département :

mysql> select deptno,avg(sal) 平均工资 from emp group by deptno;
+--------+--------------+
| deptno | 平均工资     |
+--------+--------------+
|     10 |  2916.666667 |
|     20 |  2175.000000 |
|     30 |  1566.666667 |
+--------+--------------+
3 rows in set (0.00 sec)

b. Filtrez les résultats :

Avoir et grouper par sont utilisés ensemble pour filtrer les résultats de grouper par

mysql> select deptno,avg(sal) 平均工资 from emp group by deptno having 平均工资 < 2000;
+--------+--------------+
| deptno | 平均工资     |
+--------+--------------+
|     30 |  1566.666667 |
+--------+--------------+
1 row in set (0.00 sec)

--having est souvent utilisé en conjonction avec group by, la fonction est de filtrer le groupe, la fonction est comme where.

Résumer

        Cet article présente ce que sont les fonctions d'agrégation, comment utiliser les fonctions d'agrégation et les statistiques de groupe. Après avoir compris ces règles d'utilisation, il sera plus pratique et plus rapide d'exploiter les données des tables MySQL à l'avenir.

Je suppose que tu aimes

Origine blog.csdn.net/qq_65307907/article/details/131487652
conseillé
Classement