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
Libérer: 2025-01-24 04:32:09
original
525 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal