ORA-00979 : Pas une expression GROUP BY
L'erreur ORA-00979 signifie une incompatibilité entre la liste SELECT
et la clause GROUP BY
de votre requête SQL. Cela se produit généralement lorsqu'une instruction SELECT
inclut des colonnes non présentes dans la clause GROUP BY
et que ces colonnes ne sont pas agrégées à l'aide de fonctions telles que SUM
, AVG
, MIN
, MAX
, COUNT
, etc.
Scénario :
Votre requête implique probablement plusieurs tables (par exemple, review
, cs
, fact
), et la clause GROUP BY
n'englobe pas toutes les colonnes non agrégées de la liste SELECT
. Par exemple :
<code class="language-sql">SELECT cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number, cf.some_other_column -- Problem: cf.some_other_column is missing from GROUP BY FROM review cr JOIN cs ON ... JOIN fact cf ON ... GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number;</code>
Solution :
Pour résoudre ce problème, soit :
Ajoutez la ou les colonnes manquantes à la clause GROUP BY
: Incluez chaque colonne de la liste SELECT
qui n'est pas agrégée dans la clause GROUP BY
.
Agréger la ou les colonnes manquantes : Utilisez une fonction d'agrégation (par exemple, SUM(cf.some_other_column)
) pour résumer les valeurs de la colonne.
Considérations supplémentaires :
Jointures sans égalité : Même si toutes les colonnes SELECT
sont dans GROUP BY
, l'erreur peut survenir avec des jointures sans égalité (par exemple, t1.id > t2.id
). Cela crée des lignes en double, violant le principe GROUP BY
. Révisez vos conditions de jointure ou utilisez des sous-requêtes pour éliminer les doublons.
Comprendre GROUP BY
: La clause GROUP BY
regroupe les lignes avec des valeurs identiques dans des colonnes spécifiées, permettant aux fonctions d'agrégation d'opérer sur chaque groupe. Sans regroupement approprié, la base de données ne peut pas déterminer une valeur unique pour les colonnes non agrégées.
En vous assurant que chaque colonne de votre liste SELECT
se trouve soit dans la clause GROUP BY
, soit agrégée, vous pouvez résoudre l'erreur ORA-00979 et obtenir des résultats de requête cohérents.
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!