Blog de Laurent Valente

Responsable technique Microsoft , Akka technologies

Laurent Valente

moi

Consulatnt technique, Expert Microsoft chez AKKA Technologie.

J'accompagne les équipes sur les différents projets Microsoft.

Ma carte de visite Microsoft

Mon CV

Mon transcript

[SQL Server]Saga transact-SQL Episode 4 : Grouper et organiser les données

Parfois l’ensemble de résultat doit être présenté selon les souhaits du client et donc certaine mise en pages sont nécessaires.

Lister les n premières valeurs


Il s’agit de la clause TOP n dans la commande SELECT. On peut avoir ainsi les n premières lignes ou les n premier % des lignes.

a
On a les 10 premières lignes de la table en fonction de leur ProductID et de leur Nom de façon croissante sur les 2 colonne globalement, c’est pour ça qu’il est recommandé d’associer une clause ORDER BY aux commandes SELECT comprenant une clause TOP.

b
On a les 10 premières lignes correspondant aux 10 premiers ProductId de la table.

c
Ici on a utilisé la clause PERCENT donc on a les 10 premiers pourcent de la table soit non plus 10 lignes mais 55 lignes ordonnées par ProductID.
La clause WITH TIES est particulière :
-    Elle se place après le TOP n
-    Elle est fortement liée à la clause ORDER BY
-    Elle permet d’ajouter, à l’ensemble de résultat, les lignes qui correspondent à la dernière ligne du TOP et dont la valeur de la colonne signalée dans la clause ORDER BY correspond.
Je crois qu’il vaut mieux un exemple :

d
On fait un top simple qui nous ramène 10 lignes.
On prend exactement la même requête et on ajoute la clause WITH TIES.

e
On a 94 lignes soit toutes les lignes de la table qui ont la valeur « color=’Black’ ». (J’espère que c’est plus clair sinon essayez le !! ça peut être utile.).

Les fonctions d’agrégation


Ce sont des fonctions SQL server intégrées que vous pouvez utiliser dans la clause SELECT ou en combinaison dans la clause GROUP BY.
A l’exception de la fonction COUNT(*) toutes les fonctions renvoient NULL si aucune ligne ne répond aux conditions.
Voici les fonctions d’agrégations les plus communes
     AVG: Calcule la moyenne d'une colonne
     COUNT: Calcule le nombre de lignes correspondant aux critères de la requête
     MAX: Calcule la valeur maximale d'une colonne
     MIN: Calcule la valeur minimale d'une colonne
     SUM: Effectue la somme des valeurs d'une colonne
     Il y a certain spécificité pour ces fonctions:
     -    COUNT est la seule fonction d’agrégation avec laquelle on peut utiliser des types de colonne text, ntext, ou image.
     -    MIN et MAX vous ne pouvez pas utiliser ces clauses avec des types bit.
     -    SUM et AVG vous pouvez les utiliser seulement avec des colonnes de type int, smallint, tinyint, decimal, numeric, float,real, money, et smallmoney.

f
Prix moyen des produits.

g
Prix total des produits.

h
Prix minimum et prix maximum.

Utiliser des fonctions d’agrégation avec des valeurs NULL


Les valeurs NULL peuvent fausser l’ensemble de résultats par exemple si on utilise la fonction COUNT dans une instruction SELECT sur une table qui compte 10 ligne et que la colonne que l’on compte contient 2 valeurs NULL, la requête retourne 8 comme résultat.

i
Ici nous avons une table qui contient 4 lignes avec des colonnes nom et prénom, mais un des prénom est NULL donc on a 4 noms et 3 prénoms.

Les fondamentaux du GROUP BY

Utilisez la clause GROUP BY sur des colonnes ou des expressions pour organiser les lignes et pour résumer ces groupes. Par exemple, utilisez la clause GROUP BY pour déterminer la quantité de chaque produit qui a été commandé pour chaque commande.
Lorsque vous utilisez la clause GROUP BY, examinez les directives suivantes:

-     Toutes les colonnes qui sont spécifiées dans la clause GROUP BY doivent être incluses dans la commande SELECT.
-    Si vous incluez une clause WHERE, SQL Server groupes uniquement les lignes qui satisferont la clause WHERE.
-    Ne pas utiliser la clause GROUP BY sur des colonnes qui contiennent plusieurs null parce que les valeurs NULL sont traitées comme un groupe.
-     Utilisez le mot-clé ALL avec la clause GROUP BY pour afficher toutes les lignes avec les valeurs NULL dans l'ensemble des colonnes, indépendamment de savoir si les lignes de satisferont la clause WHERE.

Exemple :
On a la table qui contient entre autre les données suivantes

j
Maintenant si on utilise la clause GROUP BY pour avoir la quantité en stock de chaque produit.

k

Group BY et HAVING


Utilisez la clause HAVING sur des colonnes ou des expressions pour définir les conditions sur le groupe inclus dans un ensemble de résultats. La clause HAVING définit les conditions sur la clause GROUP BY, au même titre que la clause WHERE interagit avec la commande SELECT.

Lorsque vous utilisez la clause HAVING, examiner les directives suivantes:
-    Utilisez la clause HAVING uniquement avec la clause GROUP BY pour restreindre le groupement. Utilisation de la clause HAVING sans la clause GROUP BY est n’a pas de sens.
-    Vous pouvez référencer l'une des colonnes qui apparait dans le SELECT.

m

Ici nous avons les produits dont la quantité en stock est comprise entre 1090 et 1300.

Génération de valeurs globales Dans Ensembles de résultats

Utiliser la clause GROUP BY avec l’opérateur CUBE et ROLLUP pour générer des valeurs globales dans les ensembles de résultats. Les opérateurs CUBE ou ROLLUP peuvent être utile pour les références croisées (cross-referencing) dans une table sans avoir à écrire
d'autres scripts.
Lorsque vous utilisez les opérateurs ROLLUP ou CUBE, utilisez la fonction GROUPING pour identifier le détail et la synthèse des valeurs dans les résultats.
Utilisez l’opérateur ROLLUP avec la clause GROUP BY pour résumer les valeurs groupées.
Exemple :

n
Ici on a le nombre d’article commandé par commande pour les produits 897 et 898.
Donc on a 4 fois le produit 897 et 15 fois le produit 898 soit 19 articles en tout. Ce que l’on voudrait c’est ne pas calculer ça à la main… WITH ROLLUP est là pour ça !!

o
On a juste ajouté la clause WITH ROLLUP entre le GROUP BY et le ORDER BY et ici la première ligne de l’ensemble de résultat est la somme totale, la deuxième (surlignée) est la somme des articles 897 ensuite le détail comme précédemment puis la somme des articles 898 et le détail.
La commande CUBE quand à elle permet de résumer les données comme le ROLLUP le fait mais ici on aura toutes les combinaisons possibles.
Un exemple avec la même requête que précédemment :

p
Ligne 1 : total des produits
Ligne 2 à 10 : somme des produits commandés par commande
Ligne 11 : somme des articles 897 commandés
Ligne 12 et  13 détail de l’article 897
Ligne 14 : somme des articles 898 commandés
Ligne 15 à la fin détail de l’article 898
Attention ici le problème de la lisibilité des résultats devient on problème car si on a n colonnes dans le GROUP BY,  SQL retournera 2n combinaisons dans l’ensemble de résultat.
Pour remédier au risque de lecture difficile la fonction GROUPING est la pour distinguer les lignes résumées des lignes détails.
Exemple :

q
La colonne « résumé » met un flag à 1 sur les lignes résumées de « productid » et la colonne « resum » met un flag à 1 sur les colonnes résumées de « saleorderid ». Donc toutes les lignes avec un flag à 1 sont des lignes résumées et pas les autres.

Utilisation des clauses COMPUTE et COMPUTE BY


Les clauses COMPUTE et COMPUTE BY génèrent des lignes résumées supplémentaires dans un format non-relationnelles qui ne sont pas aux normes ANSI. Si c’est utile pour la visualisation, la sortie n'est pas bien adaptée pour la production d'ensembles de résultats à utiliser avec d'autres applications.
On ne peut pas inclure de colonne text, ntext ou image dans ces clauses.
Exemple :

r
Ici on a 2 ensembles de résultats un pour le détail de la requête et un pour la somme de la quantité globale.
Un exemple en ajoutant un COMPUTE BY :

s
Ici on a un résumé par produit, le détail de chaque produit et le résumé total.

Posted: Jan 14 2009, 16:47 by laurentv | Comments (17) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Privé | SQL Server

Comments

thesis said:

All students have to handle thesis title about this good topic in a correct way, just because they need that a thesis in a future life.

# August 27 2010, 08:54

reaction paper writing said:

The customized essays writing would not constantly be a kind of fun. The custom term papers could utilize a long time. Wise people will recommend to buy research paper. I opine that it is the best way.

# August 27 2010, 17:58

buying essays online said:

Every university student wants to have assurances that the custom research papers they order from the buy essays online service are of good quality. Moreover, that's important thing.

# August 29 2010, 12:32

editing services said:

Academic writers can write the best academic papers for you. Furthermore, that seems to be worth to buy academic essay papers at the professional custom writing services where such experiences research paper writers are employed.

# August 31 2010, 16:07

Traffic Siphon Review said:

I would like to start off by stating, thank you for supplying me with the information I’ve been looking for. I have been surfing the internet for two hours searching for it and wish I would have found your site sooner. Not only did I locate what I was looking for, but found answers to questions I never even thought to ask myself. Thank you for such a wonderful web

# September 09 2010, 10:37

buy writing paper said:

If university students are willing their academic essay to be correctly done, they will need to utilize the good buy papers online writing service, which would be a proper place to buy essays online from.

# October 07 2010, 12:05

dissertation writing service said:

Buy thesis or dissertation service can be acceptable for all student. And you accomplish super dissertation references as this good topic.

# October 12 2010, 18:09

buy an essay said:

Do you guess it supposes to be not hard to buy essay? Partway, you are right. Nevertheless, that can be not easy to buy an essay completed of high quality.

# October 15 2010, 12:39

thesis service said:

Your thought related to this topic is good enough and lots of students could use that for their thesis mba. And some of students very often take the aid of buy dissertation service.

# November 17 2010, 18:28

custom dissertation said:

It is hard to buy dissertations referring to this good topic! First of all people must determine good custom thesis or custom dissertation, then it is be assertable to order thesis proposal in web.

# December 08 2010, 14:02

dissertation said:

The topic close to this post is great! Therefore scholars do not have to accomplish the thesis writing or dissertation thesis by their own, they will use your support.

# December 08 2010, 14:02

writing dissertation said:

Smile  I must appreciate you for the post you have shared. . I really like it. . thank you for sharing Smile

# March 08 2011, 16:18

replica tiffany said:

We have been in business for almost 10 years so you can confidently buy from us knowing that we will be there tomorrow as well. Unlike other websites then we manufacture our own product line so you won't get cheap or poorly made designs unlike from some other websites who just sell plated metals with an silver coating or where their silver is mixed with allergy causing metals such as nickel.

# May 30 2011, 04:54

Office Humor said:

This is a great post! I'll come back often to check if there are any new blogs!

# June 02 2011, 03:41

real estate bangalore said:

So informative. Great info. I like all your post. I will keep visiting this blog very often.

# July 12 2011, 15:25

northface said:

<p><a href="...rthfacehonsale.org"><strong>north" rel="nofollow">...rthfacehonsale.org"><strong>north face shop</strong></a> the application of good, <a href="...rthfacehonsale.org"><strong>north" rel="nofollow">...rthfacehonsale.org"><strong>north face outlet</strong></a> diction properly make people who read up very  comfortable,<strong> <a href="http://www.northfacehonsale.org/womens-north-face-apex-bionic-c-77.html">the" rel="nofollow">www.northfacehonsale.org/...c-77.html">the  north face apex</a></strong> plus beautiful  sentences,<strong> <a href="http://www.northfacehonsale.org/womens-north-face-down-c-79.html">northface" rel="nofollow">www.northfacehonsale.org/womens-north-face-down-c-79.html">northface  down</a></strong> can reflect the value of  more articles <strong><a href="http://www.northfacehonsale.org/mens-north-face-down-c-71.html">down" rel="nofollow">www.northfacehonsale.org/...-71.html">down  jacket</a></strong>.<strong> </strong></p>
http://www.northfacehonsale.org/

# December 28 2011, 02:45

Hosting Services said:

This blog is providing beautiful news about  the Liberian Educational Sector. It is nice to know about it this is useful information. And such blogs makes us familiar with the whole world.

# January 30 2012, 08:26

Add comment




biuquote
  • Comment
  • Preview
Loading

captcha

*