Pourquoi avons-nous besoin de GROUPE avec des FONCTIONS d'AGRÉGATION?
J'ai vu un exemple où il y a une liste (tableau) des employés avec leurs salaires mensuels. J'ai fait une somme des salaires et vu exactement la même table dans la ouptput !!! C'était étrange.
Voici ce qui doit être fait - nous savoir combien d'argent nous payer ce mois-salaires des employés. Pour cela, nous avons besoin de la somme de leur salaire dans la base de données, comme illustré -
SELECT EmployeeID, SUM (MonthlySalary)
FROM Employee
GROUP BY EmpID
Je sais que j'ai une erreur si je n'utilise pas de groupe dans le code ci-dessus. C'est ce que je ne comprends pas -
Nous sommes en sélectionnant employé de la table employés. SUM() est dit qu'il a ajouter le MonthlySalary colonne de la table Employés. Donc, il devrait directement aller et ajouter ces chiffres vers le haut au lieu de les regrouper et ensuite de les ajouter.
C'est comment une personne le ferait - regarder des employés de la table et ajouter tous les nombres. Pourquoi aurait-il prendre la peine de les regrouper et ensuite de les additionner ?
- Si vous souhaitez calculer la somme de la colonne entière sans regroupement, de ne pas les utiliser SQL group by. SQL group by n'est pas de faire ce que une personne pourrait être en train de faire. En SQL, le groupement n'a pas de sens si vous ne faites pas quelque chose pour les groupes.
- quels groupes ?
- Les groupes de EmpID de la table Employés. Au lieu d'essayer de comparer ce groupe en est à faire par rapport à ce que fait une personne, demandez plutôt: Comment SQL groupe de travail et comment pouvons-nous nous aligner avec ce que nous voulons: stackoverflow.com/questions/7434657/how-does-group-by-works
- parce qu'une personne serait implicitement en déduire qu'il/elle a à la somme du salaire de nombre à travers le même id de l'employé. Un homme l'analyse de la table et la somme de tous les salaires correspondant à la même id de l'employé. Le "correspondant à la même id d'employé" cahier des charges est le "GROUPE Par EmpID" la partie d'un homme qui ne déduire et un ordinateur ne serait pas 🙂 Le fait que vous êtes en sélectionnant "Employé" peut-être rien à voir avec le fait que vous souhaitez de la somme de tous les salaires à travers le même id de l'employé
Vous devez vous connecter pour publier un commentaire.
Il pourrait être plus facile si vous pensez de GROUPE EN tant que "pour chaque" pour le bien de l'explication. La requête ci-dessous:
dit:
"Donnez-moi la somme de MonthlySalary de pour chaque empid"
Donc, si votre table ressemblait à ceci:
résultat:
Somme ne semble pas faire quelque chose parce que la somme d'un nombre est ce nombre. D'autre part, si elle ressemblait à ça:
résultat:
Alors il serait parce qu'il y a deux empid 1 de l'additionner. Vous ne savez pas si cette explication vous aide ou pas, mais j'espère que ça rend les choses un peu plus claires.
Si vous voulez ajouter tous les nombres que vous n'auriez pas un GROUPE PAR:
Le point de le GROUPE EN est que vous recevrez un total de chaque employé.
Le plus triste, c'est qu'il y a une base de données qui prend en charge la syntaxe, vous suggérez:
Toutefois, MySQL ne pas faire ce que vous attendez. Il retourne la somme globale de la MonthlySalary pour tout le monde, et un arbitraire de l'Employé. Hélas.
Votre question est à propos de la syntaxe SQL. La réponse est que c'est la façon dont SQL a été défini, et il ne va pas changer. La détermination de l'agrégation des champs de la
SELECT
clause n'est pas déraisonnable, mais elle n'est pas la façon dont cette langue est définie.Je ne, cependant, ont de la sympathie pour la cause. Beaucoup de gens l'apprentissage du SQL pense de "regroupement" comme quelque chose de fait dans le contexte de trier les lignes. Quelque chose comme "trier les villes aux états-unis et de les regrouper par l'état à la sortie". Du sens. Mais "group by" dans SQL signifie vraiment "résumer par" pas "tenir ensemble".
Many people learning SQL think of "grouping" as something done in the context of sorting the rows. Something like "sort the cities in the US and group them by state in the output"
- Comment pouvez-vous obtenir le regroupement dans SQL alors ?Si vous ne spécifiez pas
GROUP BY
, les fonctions d'agrégation fonctionner sur tous les enregistrements sélectionnés. Dans ce cas, il n'est pas judicieux de sélectionner également une colonne spécifique, commeEmployeeID
. Soit que vous voulez, par employé, totaux, dans ce cas, vous sélectionnez l'ID de l'employé et de groupe par l'employé, ou si vous voulez un total, pour l'ensemble de l'ensemble de la table, afin de vous laisser l'ID de l'employé et de l'GROUP BY
clause.Dans votre requête, si vous laissez de côté le
GROUP BY
, qui ID de l'employé ne serait-il montrer?