Maison >base de données >tutoriel mysql >Pourquoi ma requête Oracle GROUP BY renvoie-t-elle une erreur « pas une expression GROUP BY » ?
Lors de l'utilisation de GROUP BY sans fonctions d'agrégation, il est essentiel de comprendre le fonctionnement d'Oracle pour éviter de rencontrer le Erreur "pas une expression GROUP BY".
GROUP BY regroupe les lignes avec des valeurs identiques pour le spécifié colonnes et produit une seule ligne de résultat. Cependant, les colonnes qui n'apparaissent pas dans une fonction d'agrégation doivent être incluses dans la clause GROUP BY pour identifier la combinaison unique de valeurs de regroupement.
Considérez le tableau suivant :
EMP +-------+------+------+ | EmpNo | EName | Sal | +-------+------+------+ | 7839 | King | 5000 | | 7698 | Blake | 2850 | | 7782 | Clark | 2450 | +-------+------+------+
Exemple 1 :
SELECT EName, Sal FROM EMP GROUP BY EName, Sal
Résultat :
+------+------+ | EName | Sal | +------+------+ | King | 5000 | | Blake | 2850 | | Clark | 2450 | +------+------+
Cette requête regroupe correctement les lignes et renvoie toutes les lignes depuis le regroupement des colonnes (ENam et Sal ) correspond.
Exemple 2 :
SELECT EName, Sal FROM EMP GROUP BY EName
Résultat :
ORA-00979: not a GROUP BY expression
Cette requête échoue car Sal n'est pas inclus dans la clause GROUP BY. Oracle ne sait pas comment agréger les multiples lignes avec des valeurs Sal différentes pour le même EName.
Exemple 3 :
SELECT EName, Sal FROM EMP GROUP BY Sal
Résultat :
ORA-00979: not a GROUP BY expression
Cette requête échoue également car EName n'est pas inclus dans la clause GROUP BY. Oracle doit savoir quel EName associer à chaque valeur Sal unique.
Exemple 4 :
SELECT EmpNo, EName, Sal FROM EMP GROUP BY Sal, EName
Résultat :
ORA-00979: not a GROUP BY expression
Cette requête échoue car le nombre de colonnes sélectionnées (EmpNo, EName, Sal) dépasse le nombre de colonnes dans la clause GROUP BY (Sal, EName). Oracle exige que les colonnes sélectionnées fassent partie du regroupement, en tenant compte des combinaisons uniques.
Exemple 5 :
SELECT EmpNo, EName, Sal FROM EMP GROUP BY EmpNo, EName, Sal
Résultat :
+-------+------+------+ | EmpNo | EName | Sal | +-------+------+------+ | 7839 | King | 5000 | | 7698 | Blake | 2850 | | 7782 | Clark | 2450 | +-------+------+------+
Cette requête réussit car toutes les colonnes sélectionnées sont incluses dans la clause GROUP BY. Oracle considère chaque combinaison unique de EmpNo, EName et Sal, ce qui donne trois lignes distinctes.
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!