これは私の HW 割り当てに対するかなり難しい SQL クエリであり、私はちょっと立ち往生しています。ヒントをいただければ幸いです。
私の質問:
SELECT nest1.carname,
nest1.plndescription,
nest1.plancount,
nest2.totalmems,
Round(( nest1.plancount / nest2.totalmems ), 2) AS pct
FROM (SELECT carriers.carname,
p.plndescription,
Count(members.planid)AS plancount
FROM carriers,
plans p,
members
WHERE carriers.carrierid = p.carrierid
AND p.planid = members.planid
GROUP BY carriers.carname,
p.plndescription)nest1
NATURAL JOIN (SELECT carriers.carrierid,
Count(members.planid)AS totalmems
FROM carriers,
plans p,
members
WHERE carriers.carrierid = p.carrierid
AND p.planid = members.planid
GROUP BY carriers.carrierid)nest2
ORDER BY nest1.carname
私のテーブルと関係。
` CREATE TABLE Carriers
( CarrierID varchar2(4) not null,
carName varchar2(35),
carAddress varchar2(50),
carCity varchar2(30),
carStCode varchar2(2),
carZip varchar2(10),
carPhone varchar2(10),
carWebSite varchar2(255),
carContactFirstname varchar2(35),
carContactLastName varchar2(35),
carContactEmail varchar2(255),
CONSTRAINT pk_CarrierID PRIMARY KEY (CarrierID)
);`
CREATE TABLE Plans
( PlanID integer not null,
plnDescription varchar2(35),
plnCost decimal (8,2),
CarrierID varchar2(4),
CONSTRAINT pk_PlanID PRIMARY KEY (PlanID),
CONSTRAINT fk_CarrierID FOREIGN KEY (CarrierId) REFERENCES Carriers
);
CREATE TABLE Members
( MemberNo integer not null,
mbrFirstname varchar2(35),
mbrLastName varchar2(35),
mbrStreet varchar2(50),
mbrCity varchar2(30),
mbrState varchar2(2),
mbrZip varchar2(10),
mbrPhoneNo varchar2(10),
PlanID integer,
mbrEmail varchar2(255),
mbrDateEffective date,
employerID integer,
CONSTRAINT pk_MemberNo PRIMARY KEY (MemberNo),
CONSTRAINT fk_PlanID FOREIGN KEY (PlanId) REFERENCES Plans,
CONSTRAINT fk_employerID FOREIGN KEY (employerID) REFERENCES employers
);
問題 : すべてのキャリアとそのプランを、そのプランのメンバー数、キャリアがサービスを提供するメンバーの総数、およびそのプランに含まれるキャリアのメンバーの割合を表示する列と共に一覧表示するクエリを作成します。例 – Blue Cross Blue Shield – は次のように表示されます。
正しい出力:
Carrier Plan PlanCount TotalMems Pct ブルー クロス ブルー シールド 2 パーティ ベーシック メディカル 10 22 45.45