SQL GROUP BY - à l'Aide de la fonction COUNT()
J'ai fait une tâche qui implique la création d'une base de données pour un hôpital et j'ai été à la rencontre d'une très frustrant d'erreur dont je n'arrive pas à résoudre n'importe comment beaucoup de recherches que je fais.
L'erreur que j'ai reçu est:
ERREUR à la ligne 1: ORA-00979: pas un GROUPE PAR l'expression
De la structure de mon code pour insérer les valeurs est:
SELECT CONSULTANT.S_NO, DOCTOR.D_NAME, CONSULTANT.SPEC,
PATIENT.P_ID, PATIENT.P_NAME, COUNT(CONSULTANT.P_ID)
FROM PATIENT, CONSULTANT, DOCTOR
WHERE PATIENT.P_ID = CONSULTANT.P_ID
AND CONSULTANT.S_NO = DOCTOR.S_NO
GROUP BY CONSULTANT.S_NO;
Et la structure de mes tables sont:
CREATE TABLE PATIENT (
P_ID NUMBER NOT NULL,
P_NAME CHAR(20),
ADDRESS VARCHAR(20),
DOB DATE,
WARD_NO NUMBER NOT NULL,
C_S_NO NUMBER NOT NULL,
CONSTRAINT PK_PATIENT PRIMARY KEY(P_ID)
);
CREATE TABLE DOCTOR (
S_NO NUMBER NOT NULL,
D_NAME CHAR(20),
APP_DATE DATE,
CONSTRAINT PK_DOC PRIMARY KEY(S_NO)
);
CREATE TABLE CONSULTANT (
S_NO NUMBER NOT NULL,
P_ID NUMBER NOT NULL,
SPEC CHAR(20),
T_CODE VARCHAR(20) NOT NULL,
CONSTRAINT PK_CDOC PRIMARY KEY(S_NO)
);
Serait vraiment reconnaissant de toute aide quelqu'un pouvait me donner sur la résolution de ce dilemme.
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes en utilisant une fonction d'agrégation, de vos champs dans la
SELECT
liste qui ne sont pas agrégées doivent être dans leGROUP BY
:Comme une note de côté, je voudrais aussi utiliser la syntaxe de JOINTURE ANSI au lieu de la liste séparée par des virgules de tables:
Maintenant, puisque vous avez besoin d'ajouter des champs supplémentaires à la
GROUP BY
cela pourrait régler leCOUNT()
total de numéros que vous ne les attendez pas. Donc, vous pourriez avoir besoin pour intégrer une sous-requête pour obtenir le nombre total, similaire à ceci:Cela vous permet ensuite de
GROUP BY
l'un des champs que vous avez initialement voulu.