Maison > base de données > tutoriel mysql > Comment résoudre ORA-00979 : regroupement de colonnes dans les requêtes SQL ?

Comment résoudre ORA-00979 : regroupement de colonnes dans les requêtes SQL ?

Mary-Kate Olsen
Libérer: 2025-01-24 04:52:09
original
720 Les gens l'ont consulté

How to Resolve ORA-00979: Grouping Columns in SQL Queries?

Comprendre et résoudre ORA-00979 dans les requêtes SQL

L'erreur ORA-00979, "pas une expression GROUP BY", se produit lorsqu'une requête SQL utilise une clause GROUP BY de manière incorrecte. Cela se produit lorsque l'instruction SELECT inclut des colonnes non mentionnées dans la clause GROUP BY ou utilise des fonctions d'agrégation sur des colonnes sans regroupement.

La clause GROUP BY regroupe les lignes avec des valeurs identiques dans des colonnes spécifiées, permettant aux fonctions d'agrégation (comme SUM, AVG, MIN, MAX, COUNT) de résumer les données au sein de chaque groupe. Sans regroupement approprié, la base de données ne peut pas déterminer les valeurs à associer à chaque groupe, ce qui entraîne l'erreur.

Exemple et solution :

Un scénario courant provoquant cette erreur implique la sélection de plusieurs colonnes, mais uniquement le regroupement par un sous-ensemble. La base de données n'est pas en mesure de déterminer une valeur unique pour les colonnes non regroupées au sein de chaque groupe.

Pour résoudre ce problème, soit :

  1. Inclure toutes les colonnes non agrégées dans la clause GROUP BY : C'est la solution la plus simple si vous souhaitez voir toutes les combinaisons uniques des colonnes sélectionnées.

  2. Utilisez les fonctions d'agrégation sur des colonnes non groupées : Si vous n'avez besoin que de statistiques récapitulatives pour certaines colonnes, appliquez des fonctions d'agrégation (comme MIN, MAX ou AVG) à ces colonnes. Cela réduira la sortie à une seule ligne par groupe.

Illustrons avec une requête corrigée :

<code class="language-sql">SELECT 
    cr.review_sk, 
    cr.cs_sk, 
    cr.full_name,
    MIN(TO_CHAR(cf.fact_date, 'mm/dd/yyyy')) AS appt, -- Using MIN to aggregate the date
    cs.cs_id, 
    cr.tracking_number
FROM 
    review cr, cs, fact cf
WHERE 
    cr.cs_sk = cs.cs_sk
    AND UPPER(cs.cs_id) LIKE '%' || UPPER(i_cs_id) || '%'
    AND row_delete_date_time IS NULL
    AND cr.review_sk = cf.review_wk (+)
    AND cr.fact_type_code (+) = 183050
GROUP BY 
    cr.review_sk, cr.cs_sk, cr.full_name, cs.cs_id, cr.tracking_number -- All non-aggregated columns are now included
ORDER BY 
    cs.cs_id, cr.full_name;</code>
Copier après la connexion

En incluant correctement toutes les colonnes non agrégées dans la clause GROUP BY, la requête s'exécutera sans l'erreur ORA-00979, garantissant l'intégrité des données et fournissant les résultats attendus. N'oubliez pas de choisir l'approche (incluant toutes les colonnes ou utilisant des fonctions d'agrégation) qui correspond le mieux à vos besoins d'analyse de données.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal