Maison >base de données >tutoriel mysql >Pourquoi ma requête Oracle GROUP BY renvoie-t-elle une erreur « pas une expression GROUP BY » ?

Pourquoi ma requête Oracle GROUP BY renvoie-t-elle une erreur « pas une expression GROUP BY » ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 17:59:43825parcourir

Why Does My Oracle GROUP BY Query Return a

GROUP BY sans fonctions d'agrégation

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn