Maison >base de données >tutoriel mysql >Comment fonctionne la clause GROUP BY de SQL sans fonctions d'agrégation ?
Comprendre GROUP BY sans fonctions d'agrégation
En SQL, l'instruction GROUP BY est utilisée pour regrouper les lignes d'une table en fonction des colonnes spécifiées. Lorsque vous utilisez GROUP BY sans fonctions d'agrégation, il est important de comprendre son fonctionnement et les conditions qu'il requiert.
Considérez l'exemple suivant :
SELECT ename, sal FROM emp GROUP BY ename, sal;
Cette requête ne renverra aucune ligne car elle viole les règles de GROUP BY sans fonctions d'agrégation :
Dans ce cas, la liste SELECT a deux colonnes (ename, sal), mais la clause GROUP BY en a trois ( émail, sal, sal). Pour corriger cela, supprimez une colonne sal de la clause GROUP BY :
SELECT ename, sal FROM emp GROUP BY ename;
Lorsque vous incluez sal dans la liste SELECT, il devient un colonne non-GROUP BY car elle ne figure pas dans la clause GROUP BY. Puisqu'il ne s'agit pas d'une fonction d'agrégation, elle déclenche l'erreur ORA-00979.
La correction de cela nécessite soit d'ajouter sal à la clause GROUP BY, soit d'utiliser une fonction d'agrégation dessus :
-- Add sal to the GROUP BY clause SELECT ename, MIN(sal), MAX(sal) FROM emp GROUP BY ename, sal; -- Use an aggregate function on sal SELECT ename, SUM(sal) FROM emp GROUP BY ename;
Raisonnement derrière les règles
L'opération GROUP BY fusionne les lignes avec des valeurs identiques dans le GROUP BY colonnes, produisant une seule ligne pour chaque ensemble unique de valeurs. L'inclusion de colonnes non-GROUP BY dans la liste SELECT sans fonctions d'agrégation crée une ambiguïté car il n'est pas clair comment choisir une valeur représentative pour chaque groupe.
Par exemple, si vous avez une table avec des colonnes Nom et Âge et que vous GROUP PAR Nom, quel âge doit être affiché dans le résultat pour chaque nom ? En utilisant des fonctions d'agrégation telles que MIN, MAX ou SUM, vous spécifiez explicitement comment gérer ces colonnes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!