Comment et quand utiliser groupe et en ayant Distinct

HAVING COUNT (*)> = 2
  

Qui a parlé de personnes à charge ici? Personne; elle est implicite. Vous voyez, quand vous créez un groupe, que «la troisième dimension invisible" de lignes constituant pour ce groupe contient une ligne pour chaque élément de ce groupe. Parce que vous groupe par les colonnes que vous sélectionnez l'une des tables compagnie et des employés, une ligne constituant pour chaque personne à charge est rejoint dans la clause FROM. Ainsi, la clause HAVING effectue ses calculs et les fonctions sur la dimension «invisible tiers" de lignes constituant "la séance derrière "chaque groupe. Prenez, par conséquent, la ligne de code suivante:

HAVING COUNT (*)> = 2

En utilisant ce code dans une annonce, c'est comme dire ce qui suit: Pour chaque groupe ayant au moins deux rangées séance constitutive derrière elle. Une autre façon de visualiser la clause HAVING est de penser à elle comme une clause WHERE qui opère sur les lignes séance constitutive derrière chaque groupe.

E.LastName SELECT + ',' + e.FirstName AS EmployeeName, count (*) comme NumDependantsAdded13OrOlder FROM Employee e INNER JOIN charge d e.SSN ON e.LastName = d.SSN GROUP BY, ORDER BY e.FirstName EmployeeName ASC

Maintenant vous pouvez ajouter une clause HAVING comme indiqué dans le code de sorte que vous récupérez seulement les employés dont le plus jeune personne à charge est ajouté à la base de données.

E.LastName SELECT + ',' + e.FirstName AS EmployeeName, count (*) comme NumDependantsAdded13OrOlder FROM Employee e INNER JOIN charge d
ON e.SSN = d.SSN GROUP e.LastName BY, e.FirstName AYANT Min (d.Age)> 13 ORDER BY EmployeeName ASC

Agrégées à des moyens de rassembler de multiples éléments en un tout. Une fonction d'agrégation fonctionne avec un jeu de lignes et renvoie une valeur unique représentant l'ensemble de ces lignes. Par exemple, Avg (Salaire) renvoie le salaire moyen des employés des lignes sélectionnées, de sorte Moy () est considérée comme une fonction d'agrégation. Les fonctions d'agrégation sont également connus comme les fonctions définis parce qu'ils opèrent sur un ensemble de données. La meilleure façon de déterminer le moment où vous pouvez et ne pouvez pas utiliser les fonctions d'agrégation est à écouter attentivement la version en langue anglaise de la question (à savoir, la requête) que vous demandez à la base de données. "Quel est le salaire moyen des employés nés après le 4 Juillet, 1975?" Est, par exemple, un simple, question de bien formé, de sorte qu'il se glisse facilement dans une instruction SQL, comme le montre le code suivant:

SELECT AVG (Salaire) FROM Employee WHERE DateOfBirth> '07 / 04/1975 '

Mais qu'en est-il "Quel est le nom de chaque employé et le salaire moyen des employés nés après le 4 Juillet, 1975?" Est-ce une question pertinente? En fait, il s'agit de deux questions distinctes qui sont naturellement "smushed" ensemble. La requête suivante qui tenterait de répondre à cette question est tout aussi anormal et serait, par conséquent, de lancer une erreur:

SELECT LastName + ',' + FirstName AS EmployeeName, Avg (Salaire) FROM Employee WHERE DateOfBirth> '07 / 04/1975 '

Comment pouvez-vous récupérer les deux employés individuels et la moyenne de tous les employés comme un résultat de requête unique set? Vous ne pouvez pas! Il s'agit de deux ensembles différents de données à deux dimensions totalement différentes, et on n'a absolument rien à voir avec l'autre. Le fait que les deux questions sont au sujet des employés ne fait aucune différence. À l'instar de toutes les fonctions, la fonction moyenne () retourne une valeur unique dans ce cas, la moyenne des valeurs de la colonne Salaire pour l'ensemble des données décrites par la clause WHERE . C'est une valeur, ce qui signifie qu'elle apparaît exactement une fois dans le résultat de la requête finale. En d'autres termes, il a une dimension d'une ligne par une colonne. D'autre part, envisager la colonne définie par le code suivant:

LastName + ',' + FirstName AS EmployeeName

EmployeeName n'est pas une fonction, pas plus qu'il ne fonctionner sur un ensemble de données. Comme on peut s'y attendre, cette définition de la colonne requête retourne une valeur pour chaque ligne de données décrites par la clause WHERE. En d'autres termes, il a une dimension de N lignes par une colonne. De toute évidence, la fonction de calcul de la moyenne ne peuvent pas co-exister avec l'affichage des colonnes dans la même instruction SQL car elles sont de dimensions différentes. Ces mêmes règles de la cale exploitation pour toutes les fonctions d'agrégation, tels que Min (), MAX (), Sum (), et ainsi de suite. Si GROUP BY est présent dans une instruction SQL, l'ensemble des données sur lesquelles un jeu de fonction opère des changements de l'un ensemble complet de données décrites par la déclaration à chaque ensemble distinct de lignes séance constitutive derrière chaque groupe. Voyez-vous pourquoi que la visualisation est si utile? En montrant que la troisième dimension invisible, vous pouvez maintenant visualiser le résultat de la fonction prévue pour chaque ensemble ou groupe de lignes dans le jeu de résultats. Si vous voulez trouver l'âge moyen auquel les à charge de chacun des employés ont été enregistrées dans la base de données, par exemple, vous devrez exécuter la requête suivante:

SELECT e.LastName + ',' + e.FirstName AS EmployeeName, Avg (d.Age) comme AverageAge FROM Employee e INNER JOIN charge d ON e.SSN = d.SSN GROUP e.LastName BY, e.FirstName

Et le résultat serait le suivant:

EmployeeName AverageAge Churvis, Adam 55 Davidow, Allen 30 Silverberg, Bethany 15 Sanders, Billy 10
Thor, Dirk NULL Rodriguez, Kiki 17 Lester, Lance 1 Romanova, Natasha 38 Kayashunu, Oksal 10 Kokilas, Susan 2 Williger, Timmy 38 Haymen, Turk 16 Feuilliette, Valérie 59

un article présenté par Daniel Carlson


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Comment et quand utiliser Groupe en ayant et distinct» a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 299 users browsing the articles directory