programing

SQL GROUP BY - COUNT() 함수 사용

yellowcard 2023. 10. 17. 20:10
반응형

SQL GROUP BY - COUNT() 함수 사용

저는 병원용 데이터베이스를 만드는 일을 해왔는데, 아무리 연구를 해도 고칠 수 없는 매우 답답한 오류를 겪고 있습니다.

제가 받은 오류는 다음과 같습니다.

1번 행의 오류: ORA-00979: 식에 의한 그룹이 아닙니다.

값을 삽입하는 내 코드의 구조는 다음과 같습니다.

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)
);

이 딜레마를 해결하는 데 도움을 줄 수 있다면 정말 감사하겠습니다.

aggregate 함수를 사용하고 있으므로 필드는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

참고로 쉼표로 구분된 테이블 목록 대신 ANSI JOIN 구문을 사용합니다.

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

이를 통해 다음을 수행할 수 있습니다.GROUP BY당신이 처음에 원했던 한 분야.

언급URL : https://stackoverflow.com/questions/13683663/sql-group-by-using-count-function

반응형