0

これは私の 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
4

2 に答える 2

0

怠け者なので、あまりタイプしたくありません。これらが正しく解析されるかどうかは確認していませんが、宿題なので簡単すぎるはずです。

mysql を使用している場合は、次のようにして、サブクエリでセッション変数を使用します。

select c.carName As Carrier
     , p.plnDescription As Plan
     , count(1) As PlanCount
     , (select @plnCount:=count(1) from members m where m.PlanId=p.PlanId) TotalMems
     , (select @plnCount/count(1) from members) Pct
 from carriers c
 left join plans p on p.CarrierId=c.CarrierId

しかし、ddl は oracle (b/c varchar2) を使用していることを示しているため、次のようになります。

select c.carName As Carrier
     , p.plnDescription As Plan
     , PlanCount
     , PlanCount/tot Pct
 from carriers c
     ,plans p on p.CarrierId=c.CarrierId
     ,(select sum(decode(m.planId,p.planId,1,0)) PlanCount, count(1) tot from members)
于 2013-04-19T20:15:04.093 に答える