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 :
GROUP BY
: Cela garantit que chaque valeur sélectionnée est directement associée à un groupe.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
GROUP BY
:<code class="language-sql">SELECT doctor, COUNT(*) FROM appointments GROUP BY doctor;</code>
Cela compte les rendez-vous par médecin.
<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!