Accueil   |   Forums   |  Offres d'emplois   |  Contact    |   Mon compte   
samedi 5 juillet 2008 Rechercher :
Déposez votre CV gratuitement sur touslesemplois
 
comparer les prix
» Logiciels
» Jeux vidéos
» Matériel Informatique


» ASP.NET
» ASP
» SQL
» PHP
» JAVASCRIPT
» XML
 


» ACTUALITÉ / DIVERS
» DROIT DE L'INTERNET
» INFOS VIRUS
» PATCHS MICROSOFT
» SÉCURITÉ
» BASES DE DONNÉES
» DOWNLOAD .NET
» LOGITHÈQUE
» SERVICES WEB
» Y SONT FOUS !
» .NET
» ASP
» ASP.NET
» JAVA
» PHP
» XML
» LANGAGE C#
» LANGAGE VB.NET
» UNIX / LINUX
» WINDOWS
» EVÈNEMENTS
» GASP
» MICROSOFT
 



Vous êtes ici : Articles SQL > NOTES DE COURS

Les clauses de regroupement
Combien Dupont a t'il commandé de produits cette année? Je souhaite envoyer une lettre à tout ceux qui ont passé pour plus de 500 FF de commande !!! etc.. Autant de questions que l'on se pose, quand l'on souhaite exploiter les données contenues dans une base de données, et qui trouvent leurs réponses grâce à la clause GROUP BY.


ABONNEZ-VOUS GRATUITEMENT A LA REVUE DE PRESSE "LES Z'ACTUS" ET RECEVEZ CHAQUE JOUR DANS VOTRE BOITE AUX LETTRES LA MEILLEURE INFORMATION DEDIEE AUX WEBMASTERS / DEVELOPPEURS.

Indiquez votre adresse E-mail :

Technologie : SQL 
Date : 29/05/2006   
Auteur : ASP MAGAZINE

Nous allons étudier dans cette partie des requêtes simples de regroupement à partir de la table suivante (qui est le début d'une table commande) :

La table commande

id_commande date_commande Nom_client MontantHT ...
1 01/01/2000 17:20:30 DUPONT 412
2 03/01/2000 14:12:02 HENRI 1234
3 10/01/2000 17:20:30 DUPONT 3152
4 12/01/2000 17:20:30 ANTOINE 51
5 13/01/2000 14:12:02 HENRI 100
3 14/01/2000 17:20:30 DUPONT 14500

Regroupement d'enregistrement : GROUP BY

Description :

Le regroupement d'enregistrement s'utilise au sein d'une requête SQL. Son fonctionnement reste le même que vous utilisiez SQL Server ou Access. Il permet de mesurer la quantité (grâce à des fonctions prédéfinies voir ci dessous) de certains champs répondants à un ou plusieurs critères défini par d'autres champs de la même table. (Je sais cela paraît un peu flou dit comme ça).

Fonctions d'agrégations utilisées dans des clauses Group By

  • SUM(exp) :
    effectue la somme des valeurs de la colonne exp

  • AVG(exp) :
    effectue la moyenne des valeurs de la colonne exp

  • COUNT(exp) :
    compte le nombre de valeurs non null trouvées dans la colonne exp

  • MAX(exp) :
    sélectionne le maximum des valeur de la colonne exp

  • MIN(exp) :
    sélectionne le minimum des valeurs de la colonne exp

Exemple :

Montant total des commandes de DUPONT :

SQL="SELECT Nom_client, Sum(Montanht) FROM commande WHERE Nom_client='DUPONT' GROUP by Nom_client"

Note : En asp une fois mon recordset ouvert sur cette requête, j'aurais accès à deux champs :
rs(0) et rs(1), rs(0) étant le nom du client et rs(1) son total hors taxe commandé.

Enlevons la clause Where à cette requête, elle devient :

SQL="SELECT Nom_client, Sum(Montanht) FROM commande GROUP by Nom_client"

Cette requête permet d'établir la liste des montant ht (somme) par client, les données générées auront la forme suivante :

Nom_client Sum(Montantht)
DUPONT 18064
HENRI 1334
ANTOINE 51

Note : DUPONT est de loin mon meilleur client

Quel est celui qui a effectué la plus grosse commande :

SQL="SELECT Nom_client, Max(Montanht) FROM commande GROUP by Nom_client"

Liste des commandes pour le mois de janvier : liste des clients, numéro du mois et montantht.
Deux requêtes différentes si vous êtes sur Access ou Sql Server. Ici on ajoute un enregistrement à la clause de regroupement (ce qui n'est pas forcément utile pour la situation mais possible). Quand vous utilisez plusieurs enregistrements dans la clause Group_by les regroupements s'effectuent de gauche à droite. Plus vous ajoutez d'enregistrements dans la clause GROUP BY et plus vous précisez (augmentez en nombre de lignes de la sélection) votre requête.

Note : tout champ sélectionné non calculé doit faire partie du regroupement. Autrement dit :

SQL="SELECT Nom_client, date_commande, Max(Montanht) FROM commande GROUP by Nom_client"
provoque une erreur.

Avec Sql Server

SQL="SELECT Nom_client, DATEPART(month,date_commande) Max(Montanht) FROM commande WHERE DATEPART(month,date_commande)=1 GROUP by Nom_client, DATEPART(month,date_commande)"

Avec Access

SQL="SELECT Nom_client,DATEPART('m',date_commande), Max(Montanht) FROM commande WHERE DATEPART('m',date_commande)=1  GROUP by Nom_client,DATEPART('m',date_commande)"

On peut comme nous l'avons vu précédemment, utiliser une clause where au sein d'un regroupement , les enregistrements contenus dans cette clause ne faisant pas forcément parties de la fonction de regroupement.  Ce qu'il faut retenir, c'est que la clause where est exécutée sur les lignes de la table utilisée pour la requête et non sur les lignes du regroupement généré... Donc impossible de connaître avec Where tout ceux dont le montant total ht a dépassé 500 F puisque ce nombre appartient au regroupement (somme calculée) et non à la table source.

On utilise une autre clause :
HAVING s'utilise avec GROUP BY uniquement pour gérer ce type de situation.
HAVING doit être placé après GROUP BY et doit contenir soit un nom de champ regroupé ou une fonction d'agrégation (ci-dessus)

Quel sont ceux qui ont passé plus de 500 Fht total de commande:

SQL="SELECT Nom_client, Sum(Montanht) FROM commande GROUP by Nom_client HAVING SUM(Montanht)>500"

> Cette requête retourne 2 enregistrements :
DUPONT - 18064 et HENRI - 1334.



Proregna - L'hébergement ASP.NET


A RETENIR CETTE SEMAINE
04/07/2008 - Suivez les étudiants français à la finale mondiale d’Imagine Cup !
Cette année, la finale a lieu à Paris et les Français ont fait honneur à leur réputation : 6 équipes ...
04/07/2008 - Des applications Cobol sous Windows
Micro Focus et Microsoft collaborent pour faire tourner des applications Cobol sous Windows, et prév ...
04/07/2008 - Avec Equipt, Microsoft va proposer Office sur abonnement
Equipt. C'est le nom qu'a choisi Microsoft pour baptiser sa prochaine suite logicielle contenant not ...
04/07/2008 - Utiliser les spécifications des protocoles Open Protocol Specifications
L’annonce réalisée par Microsoft sur l’ouverture de ses protocoles avaient rendu sceptiques les gran ...
04/07/2008 - Les nouvelles bornes Express Pro de la SNCF plus attractives et performantes
La technologie de développement d'interface Microsoft Windows Presentation Foundation du Framework . ...
04/07/2008 - Internet Explorer 8 promet d’être plus sécurisé
Le navigateur emportera avec lui des cryptages particuliers de défense contre les cookies trop curie ...
03/07/2008 - Commencer bien l'été en téléchargeant les versions Express de Visual Studio 2008
Téléchargez gratuitement les outils de développement Microsoft pour les développeurs débutants ou am ...
(c) 1999-2006 ASP MAGAZINE SARL
Partenaires : Codes sources c2i ASP-PHP
Hébergement serveurs dédiés Windows


Hit-Parade