私は病院のデータベースを作成する作業を行っていましたが、どんなに研究を行っても修正できないような非常に苛立たしいエラーに遭遇しました。
私が受け取ったエラーは次のとおりです。
1行目のエラー:ORA-00979:GROUPBY式ではありません
値を挿入するためのコードの構造は次のとおりです。
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;
そして、私のテーブルの構造は次のとおりです。
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)
);
このジレンマを解決するために誰かが私に与えることができるどんな助けでも本当に感謝します。
集計関数を使用しているため、集計されていないSELECT
リストのフィールドは_GROUP BY
_にある必要があります。
_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, DOCTOR.D_NAME, CONSULTANT.SPEC, PATIENT.P_ID, PATIENT.P_NAME
_
補足として、テーブルのコンマ区切りリストの代わりにANSIJOIN構文も使用します。
_SELECT c.S_NO, d.D_NAME, c.SPEC, p.P_ID, p.P_NAME, COUNT(c.P_ID)
FROM PATIENT p
INNER JOIN CONSULTANT c
ON p.P_ID = c.P_ID
INNER JOIN DOCTOR d
ON c.S_NO = d.S_NO
GROUP BY c.S_NO, d.D_NAME, c.SPEC, p.P_ID, p.P_NAME
_
ここで、_GROUP BY
_にフィールドを追加する必要があるため、これにより、COUNT()
の合計が予期しない数値に調整される可能性があります。したがって、次のように、合計数を取得するためにサブクエリを組み込む必要がある場合があります。
_SELECT c1.S_NO, d.D_NAME, c1.SPEC, p.P_ID, p.P_NAME, c2.Count_P_ID
FROM PATIENT p
INNER JOIN CONSULTANT c1
ON p.P_ID = c1.P_ID
INNER JOIN
(
select COUNT(c.P_ID) Count_P_ID, S_NO
from CONSULTANT c
group by S_NO
) c2
ON c1.S_NO = c2.S_NO
INNER JOIN DOCTOR d
ON c1.S_NO = d.S_NO
_
これにより、最初に必要だった1つのフィールドを_GROUP BY
_することができます。