Notes d'étude MySQL ------ requête de groupe

//--------------requête de groupe--------------//

1. Grammaire

select 分组函数,分组的列表
from 表
【where 筛选条件】
group by 分组的列表
【order by 排序的字段】;

Remarque : La liste de requêtes doit être spéciale et il doit s'agir du champ qui apparaît après la fonction de regroupement et le groupe par ;

2. Caractéristiques

1. Le champ interrogé avec la fonction de regroupement doit être le champ qui apparaît après regrouper par ;

2. Le dépistage est divisé en deux catégories : le dépistage pré-groupe et le dépistage post-groupe ;

                                Tableau filtré par mot-clé Localisation

        Filtrer WHERE avant la table d'origine GROUP BY avant le regroupement

        Filtrer après regroupement AYANT regroupé les résultats après GROUP BY

Remarque : la condition de la fonction de regroupement doit être placée dans la clause have, qui peut être filtrée avant le regroupement, et le filtre avant le regroupement est préféré ;

Question 1 : La fonction de regroupement peut-elle être utilisée pour filtrer après où ? Réponse : Non ;

Question 2 : où——regrouper par——avoir ? De manière générale, si vous pouvez utiliser le dépistage pré-groupe, essayez d'utiliser le dépistage pré-groupe pour améliorer l'efficacité ;

3. Le regroupement peut être effectué par un seul champ ou par plusieurs champs, et les multiples champs sont séparés par des virgules et sans ordre ;

4. Il peut être utilisé avec le tri ;

3. Utilisation spécifique

1. Introduction : Interrogez le nombre d'employés dans chaque service

SELECT COUNT(*) FROM employees WHERE department_id=90;

2. Regroupement simple

(1) Cas 1 : Interroger le salaire moyen des salariés pour chaque type de travail

SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

(2) Cas 2 : Interroger le nombre de départements dans chaque emplacement

SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;

(3) Cas 3 : Interroger le salaire maximum des salariés de chaque type de travail

SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id; 

3. Filtrage avant que le regroupement puisse être réalisé

(1) Cas 1 : Interroger le salaire maximum de chaque département contenant le caractère a dans la boîte aux lettres

SELECT MAX(salary),department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;

(2) Cas 2 : Interroger le salaire moyen des employés de chaque dirigeant bénéficiant de primes

SELECT AVG(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

4. Dépistage après regroupement

(1) Ajouter des conditions de filtre simples

  1) Cas : Rechercher quel service compte plus de 5 employés

#(1)查询每个部门的员工个数
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id

#(2)根据(1)的结果进行筛选,查询哪个部门的员工个数>2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;#having用于分组后的筛选,where用于分组前对原始表的筛选

(2) Ajoutez des conditions de filtrage complexes, si les conditions sont trop complexes, elles peuvent être divisées et exécutées séparément

Remarque : Certains dans le tableau d'origine utilisent où filtrer, comme : avoir des primes, et ceux qui ne figurent pas dans le tableau d'origine utilisent devoir filtrer, comme : le salaire le plus élevé > 12 000 ;

  1) Cas 2 : Salaire le plus élevé des salariés avec primes pour chaque type de travail > 12000 numéro de type et salaire maximum

SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

  2) Cas 3 : Le numéro de leader et le salaire minimum de chaque leader dont le numéro de leader > 102 est supérieur à 5000

SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000;

5. Ajouter un tri

Cas : Salaire le plus élevé des salariés avec primes pour chaque type de travail > 6000 numéro de type et salaire maximum, par ordre croissant du salaire le plus élevé

SELECT job_id,MAX(salary) m
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING m>6000
ORDER BY m ;

6. Regrouper par plusieurs champs

Cas : Interrogez le salaire minimum de chaque type de travail et de chaque département, et triez par salaire minimum

SELECT MIN(salary),job_id,department_id
FROM employees
GROUP BY department_id,job_id
ORDER BY MIN(salary) DESC;

7. Regrouper par expression ou fonction

Cas : regroupez par la longueur du nom de l'employé, interrogez le nombre d'employés dans chaque groupe et filtrez le nombre d'employés > 5

SELECT COUNT(*),LENGTH(last_name)
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*)>5;

#可以使用别名
SELECT COUNT(*) c,LENGTH(last_name) la_name
FROM employees
GROUP BY la_name
HAVING c>5;

Je suppose que tu aimes

Origine blog.csdn.net/weixin_47156401/article/details/131927905
conseillé
Classement