Maison >base de données >tutoriel mysql >Pourquoi ma requête SQL génère-t-elle ORA-00979 : pas une expression GROUP BY ?

Pourquoi ma requête SQL génère-t-elle ORA-00979 : pas une expression GROUP BY ?

DDD
DDDoriginal
2025-01-24 04:32:09567parcourir

Why Does My SQL Query Generate ORA-00979: Not a GROUP BY Expression?

Décodage de l'erreur ORA-00979 dans la clause GROUP BY de SQL

Cette erreur SQL courante, ORA-00979 ("Pas une expression GROUP BY"), se produit lorsque votre requête utilise GROUP BY mais inclut des colonnes dans la liste SELECT qui ne sont ni regroupées ni agrégées. Voyons comment résoudre ce problème.

Le principal problème réside dans l'inadéquation entre les clauses SELECT et GROUP BY. GROUP BY consolide les lignes avec des valeurs correspondantes en groupes. Chaque colonne de votre SELECT déclaration doit soit :

  1. Apparaître dans la clause GROUP BY : Cela garantit que chaque valeur sélectionnée est directement associée à un groupe.
  2. Être agrégé : Utilisez des fonctions telles que MIN(), MAX(), SUM(), AVG(), COUNT() pour résumer les valeurs au sein de chaque groupe.

Exemple illustratif

Imaginez une table avec rendez-vous :

Appointment ID (appt_id) Patient Name (patient) Doctor (doctor)
1 Alice Dr. Smith
2 Bob Dr. Smith
3 Charlie Dr. Jones

Une requête incorrecte :

<code class="language-sql">SELECT appt_id, patient, doctor FROM appointments GROUP BY doctor;</code>

Cela échouera avec ORA-00979 car appt_id et patient ne sont pas regroupés.

Approches correctes

  • Inclure toutes les colonnes non agrégées dans GROUP BY :
<code class="language-sql">SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;</code>

Cela compte les rendez-vous par médecin.

  • Utiliser les fonctions d'agrégation :
<code class="language-sql">SELECT doctor, COUNT(*) AS appointment_count, MIN(appt_id) AS first_appointment FROM appointments GROUP BY doctor;</code>

Ceci compte les rendez-vous et trouve l'identifiant minimum de rendez-vous par médecin.

La clé est d'assurer une relation cohérente entre les critères de regroupement et les données sélectionnées. L'utilisation de fonctions d'agrégation vous permet de résumer les données au sein de groupes, évitant ainsi l'erreur ORA-00979.

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