0

ここに私の2つのテーブルがあります:

CREATE TABLE Classes (
    Class_ID Varchar2(2) CONSTRAINT Classes_Class_ID_Pk PRIMARY KEY,
    Class_Name VARCHAR(15) CONSTRAINT Classes_Class_Name_NN NOT NULL,
    Price Number(5, 2),
    Start_Date DATE,
    End_Date DATE,
    Start_Time Varchar2(5),
    End_Time Varchar2(5),
    Day VARCHAR(10),
    Trainer_ID CONSTRAINT Classes_Trainer_ID_FK REFERENCES Trainers(Trainer_ID)
);

CREATE TABLE ClassSchedule (
    Class_ID Varchar2(2) CONSTRAINT Classes_Class_ID_FK REFERENCES Classes(Class_ID),
    Member_ID Varchar2(2) CONSTRAINT Members_Member_ID_FK REFERENCES Members(Member_ID),
    Paid CHAR(1),
    CONSTRAINT ClassSchedule_Combo_PK PRIMARY KEY (Class_ID, Member_ID)
);

ここで、クラスごとに、クラス ID、クラス名、クラスごとの価格、各クラスのメンバー数、および各クラスの総収入をリストしたいと思います。$400 を超えるグループのみを表示し、計算された合計で並べ替えます。動作していないクエリは次のとおりです。

SELECT
    C.Class_Id,
    Class_Name,
    Price,
    Count(S.Member_Id) AS Student_Count,
    (Student_Count * Price) AS Class_Revenue
FROM Classes C,
     ClassSchedule S
WHERE C.Class_ID = S.Class_Id
  AND (Student_Count * Price) > 400
ORDER BY Class_Revenue DESC

どんな助けでも大歓迎です。それを機能させようとして、頭を壁にぶつけていました。

4

2 に答える 2

0

overで節を使用してみてくださいcount():

select Class_Id, 
       Class_Name,
       Price,
       Student_Count,
       (Student_Count * Price) AS Class_Revenue
from
(SELECT
    C.Class_Id,
    Class_Name,
    Price,
    Count(S.Member_Id) over (partition by C.Class_Id) AS Student_Count
FROM Classes C,
     ClassSchedule S
WHERE C.Class_ID = S.Class_Id) t
where (Student_Count * Price) > 400
order by (Student_Count * Price) desc
于 2013-04-29T07:30:01.890 に答える