Requêtes SQL (groupement)

Les fonctions de regroupement

Ordre général : SELECT FROM JOIN ON (WHERE) GROUP BY HAVING ORDER BY

GROUP BY

SELECT * FROM etudiants;
GROUP BY genre  // Regroupement par sexe
COUNT() pour compter
SELECT genre, COUNT(genre) FROM etudiants GROUP BY genre;

Regroupement par âge et comptage
SELECT age, COUNT(*) FROM etudiants GROUP BY age;
(* représente le champ age du GROUP BY)

Moyenne d'âge par sexe
SELECT genre, AVG(age) FROM etudiants GROUP BY genre;

Maximum/minimum d'âge par sexe
SELECT genre, MAX(age) FROM etudiants GROUP BY genre;


Somme des âges par sexe
SELECT genre, SUM(age) FROM etudiants GROUP BY genre;


# HAVING
Conditions similaires à WHERE
SELECT * FROM employes WHERE age > 18;

Filtrage après regroupement
Moyenne d'âge par sexe avec filtre supérieur à 18 ans
SELECT genre, AVG(age) FROM etudiants GROUP BY genre HAVING AVG(age) = 18;

Moyenne de salaire par poste avec filtre supérieur à 5000
SELECT poste, AVG(salaire), COUNT(*) FROM employes GROUP BY poste HAVING AVG(salaire) > 5000;
SELECT SUM(salaire) FROM employes;
SELECT AVG(salaire) FROM employes;
SELECT MAX(salaire) FROM employes;

Tri décroissant des résultats HAVING
ORDER BY DESC/ASC
SELECT poste, AVG(salaire), COUNT(*) FROM employes
GROUP BY poste
HAVING AVG(salaire) > 5000
ORDER BY AVG(salaire) DESC;

SELECT poste, AVG(salaire), COUNT(*) FROM employes
GROUP BY poste
ORDER BY AVG(salaire) DESC;


Limite de lignes

SELECT poste, AVG(salaire), COUNT(*) FROM employes
GROUP BY poste
HAVING AVG(salaire) > 5000
ORDER BY AVG(salaire) DESC
LIMIT 3;

SELECT id, nom, salaire FROM employes ORDER BY salaire DESC;

SELECT id, nom, salaire FROM employes ORDER BY salaire DESC LIMIT 3;


Fonction IFNULL

WITH ROLLUP pour total général
SELECT IFNULL(poste, "Total"), COUNT(poste) FROM employes
GROUP BY poste WITH ROLLUP;

SELECT id_departement FROM etudiants;
SELECT IFNULL(id_departement, "1011") FROM etudiants;


DISTINCT pour éliminer les doublons

SELECT DISTINCT nom FROM employes;

Extraction de sous-chaîne

SELECT LEFT(salaire, 4) FROM employes;
SELECT RIGHT(salaire, 3) FROM employes;
SELECT SUBSTRING(salaire, 1, 4) FROM employes;  // Caractères 1 à 4


Concaténation

SELECT CONCAT(salaire, nom) AS nom_salaire FROM employes;

SELECT NOW(); // Date et heure actuelles

SELECT * FROM departement; +----------+------------------+ | id_dep | nom_departement | +----------+------------------+ | 102 | Université de Shanghai | | 103 | Université de Zhejiang | | 101 | Tsinghua | | 105 | Institut Polytechnique | +----------+------------------+ SELECT * FROM departement JOIN etudiants ON ;

+----------+----------+--------------+ | id_etudiant | nom_etudiant | id_departement | +----------+----------+--------------+ | 1 | Zhang San | 101 | | 2 | Li Si | 102 | | 3 | Wang Wu | 103 | | 4 | Zhao Liu | 101 | | 5 | Sun Qi | 102 | | 6 | Xiao Hua | 103 | | 8 | Xiao Ce | 105 | | 9 | C Ersi | NULL | +----------+----------+--------------+

Index

Créés automatiquemant lors de la création de contraintes

SHOW KEYS FROM etudiants;
Les index sont comme un sommaire
id 


Rehcerche partielle

Operateurs LIKE : _ = 1 caractère, % = n'importe quel nombre de caractères

SELECT nom FROM employes WHERE nom LIKE "_Hua";
SELECT nom FROM employes WHERE nom LIKE "%Hua%";


Étiquettes: requêtes-SQL groupement having tri limit

Publié le 17 septembre à 10h23