0

私は次のSQLコードを持っています:

SELECT  ACTIVITY_TYPE, COUNT(EVENT_ID) as etv, SUM(etv) as etva, AVG(etva)
FROM ACTIVITIES, "EVENTS"
WHERE ACTIVITIES.ACTIVITY_ID="EVENTS".ACTIVITY_ID
GROUP BY ACTIVITY_TYPE;

これは、この質問に答える試みです。

d)提供されているさまざまなタイプの活動の実施に関する管理情報を提供するクエリ。アクティビティのタイプごとに、クエリはそのタイプのアクティビティを実行した個人の総数と、各タイプのアクティビティを実行した個人の平均数を表示する必要があります。

残念ながら、次のエラーが発生します。

ORA-00904: "ETVA": invalid identifier

どんな助けでも素晴らしいでしょう!

編集:

SELECT  ACTIVITY_TYPE, COUNT(EVENT_ID), AVG(COUNT(EVENT_ID))
FROM ACTIVITIES, "EVENTS"
WHERE ACTIVITIES.ACTIVITY_ID="EVENTS".ACTIVITY_ID
GROUP BY ACTIVITY_TYPE;

これは私が今このエラーを受け取っている新しいクエリです:

ORA-00937: not a single-group group function

テーブル構造:

CREATE TABLE "GROUPS" (
  GROUP_ID NUMBER( 4 ) NOT NULL CONSTRAINT GROUP_ID_PK  PRIMARY KEY ,
  GROUP_NAME VARCHAR2(35) NULL,
  GROUP_NUMBER_OF_MEMBERS NUMBER( 3 ) NOT NULL ,
  GROUP_LEADER_ID NUMBER( 4 ) NOT NULL
);

CREATE TABLE MEMBERS (
  MEMBER_ID NUMBER( 4 ) NOT NULL CONSTRAINT MEMBER_ID_PK  PRIMARY KEY ,
  MEMBER_SURNAME VARCHAR2( 35 ) NOT NULL ,
  MEMBER_FIRST_NAME VARCHAR2( 35 ) NOT NULL ,
  MEMBER_DOB DATE NOT NULL ,
  MEMBER_GENDER VARCHAR2( 1 ) NOT NULL CONSTRAINT MEMBER_GENDER_CHECK CHECK ( MEMBER_GENDER IN ( 'M' , 'F' ) ),
  GROUP_ID NUMBER( 4 ) NOT NULL,
  CONSTRAINT GROUP_ID_FK_MEMBER FOREIGN KEY (GROUP_ID) REFERENCES "GROUPS"(GROUP_ID)
);

CREATE TABLE CHALETS (
  CHALET_NO NUMBER( 4 ) NOT NULL CONSTRAINT CHALET_ID_PK  PRIMARY KEY ,
  CHALET_NAME VARCHAR2( 35 ) NOT NULL,
  CHALET_CAPACITY NUMBER( 2 ) NOT NULL,
  CHALET_RATE NUMBER( 6 , 2 ) NOT NULL
);

CREATE TABLE SUPERVISORS (
  SUPERVISOR_ID NUMBER ( 4 ) NOT NULL CONSTRAINT SUPERVISOR_ID_PK PRIMARY KEY ,
  SUPERVISOR_SURNAME  VARCHAR2( 35 ) NOT NULL , 
  SUPERVISOR_FIRST_NAME VARCHAR2( 35 ) NOT NULL ,
  SUPERVISOR_MOBILE_NUMBER VARCHAR2( 11 ) NOT NULL
);

CREATE TABLE ACTIVITIES (
  ACTIVITY_ID NUMBER ( 4 ) NOT NULL CONSTRAINT ACTIVITY_ID_PK PRIMARY KEY , 
  ACTIVITY_TYPE VARCHAR ( 35 ) NOT NULL , 
  ACTIVITY_TITLE VARCHAR2( 35 ) NOT NULL
);

CREATE TABLE BOOKINGS (
  BOOKING_ID NUMBER( 4 ) NOT NULL CONSTRAINT BOOKING_ID_PK PRIMARY KEY , 
  GROUP_ID NUMBER( 4 ) NOT NULL , 
  CHALET_ID NUMBER( 4 ) NOT NULL ,
  BOOKING_START_DATE DATE NOT NULL , 
  BOOKING_END_DATE DATE NOT NULL ,
  CONSTRAINT GROUP_ID_FK_BOOKING FOREIGN KEY (GROUP_ID) REFERENCES GROUPS(GROUP_ID) ,
  CONSTRAINT CHALET_ID_FK_BOOKING FOREIGN KEY (CHALET_ID) REFERENCES CHALETS(CHALET_NO)
);

CREATE TABLE "EVENTS" (
  EVENT_ID NUMBER ( 4 ) NOT NULL CONSTRAINT EVENT_ID_PK PRIMARY KEY , 
  MEMBER_ID NUMBER ( 4 ) NOT NULL , 
  SUPERVISOR_ID NUMBER ( 4 ) NOT NULL ,
  ACTIVITY_ID NUMBER ( 4 ) NOT NULL ,
  EVENT_COMMENTS VARCHAR2( 500 ) ,
  EVENT_DATE DATE NOT NULL , 
  EVENT_TIME_SLOT VARCHAR2( 2 ) NOT NULL ,
  CONSTRAINT MEMBER_ID_FK_EVENT FOREIGN KEY (MEMBER_ID) REFERENCES MEMBERS(MEMBER_ID) ,
  CONSTRAINT SUPERVISOR_ID_FK_EVENT FOREIGN KEY (SUPERVISOR_ID) REFERENCES SUPERVISORS(SUPERVISOR_ID) ,
  CONSTRAINT ACTIVITY_ID_FK_EVENT FOREIGN KEY (ACTIVITY_ID) REFERENCES ACTIVITIES(ACTIVITY_ID)
);


ALTER TABLE "GROUPS" ADD CONSTRAINT MEMBER_ID_FK_GROUP_LEADER FOREIGN KEY (GROUP_LEADER_ID) REFERENCES MEMBERS(MEMBER_ID);
4

3 に答える 3

1

問題はにありAVG(etva)ます。

エイリアスSELECT listは、定義された場所と同じ場所で使用することはできません。

AVGより大きな問題は、値( )に対して集計関数を使用できないことです SUM()

コーディングビズAVG(etv)がすでに指摘しているように、必要なタスクの説明に基づいています。

CONTINUE 新しいクエリが投稿された後。

私の理解では、EVENTSメンバーと彼らが参加する活動を結びつける記録があります。

その場合、アクティビティタイトルを取得するには、「ACTIVITIES」からのメンバーと「ACTIVITIES」からのメンバーのカウントを計算JOIN EVENTSする必要があります。sub-queryEVENTS

于 2013-03-07T22:23:39.847 に答える
0

投稿された構造からわかるように。各イベントは一意であり、各イベントには1人のメンバーのみが参加します。したがって、特定のアクティビティを含むイベントの合計であるため、アクティビティごとの平均メンバー数をカウントすることはできません。参加者の総数のみが可能です:

SELECT  ACTIVITY_TYPE, COUNT(EVENT_ID)
FROM ACTIVITIES, "EVENTS"
WHERE ACTIVITIES.ACTIVITY_ID="EVENTS".ACTIVITY_ID
GROUP BY ACTIVITY_TYPE;

私が間違っている場合は私を訂正してください。

于 2013-03-07T23:10:48.160 に答える
0

クエリのetvとetvaは列ではなく、エイリアスです。選択できません。それらを選択するには、これに従い、クエリ/列に意味のあるエイリアスを付けます。

SELECT ACTIVITY_TYPE, count_etv, sum_etva, AVG(sum_etva) avg_atva
  FROM
  (
   SELECT ACTIVITY_TYPE, count_etv, SUM(count_etv) as sum_etva
     FROM
   (
    SELECT ACTIVITY_TYPE, COUNT(EVENT_ID) as count_etv  
       --, SUM(etv) as etva, AVG(etva) -- NOT columns you cannot select them
     FROM ACTIVITIES, "EVENTS"
    WHERE ACTIVITIES.ACTIVITY_ID="EVENTS".ACTIVITY_ID
   GROUP BY ACTIVITY_TYPE
   )
   GROUP BY ACTIVITY_TYPE, count_etv
  )
 GROUP BY ACTIVITY_TYPE, count_etv, sum_etva
 /

2番目のクエリ-よりクリーンで読みやすい...:

SELECT ACTIVITY_TYPE -- optional
      , total_events  -- optional
     , AVG(total_events) avg_events
  FROM
  (
   SELECT ACTIVITY_TYPE
        , COUNT(EVENT_ID) total_events
     FROM ACTIVITIES, "EVENTS"
    WHERE ACTIVITIES.ACTIVITY_ID="EVENTS".ACTIVITY_ID
    GROUP BY ACTIVITY_TYPE
   )
  GROUP BY ACTIVITY_TYPE, total_events
  /
于 2013-03-08T14:08:17.623 に答える