2016-11-14 5 views
0

私はMySQLデータベースをクエリした経験があり、私はOracleで同じことをする方法を学ぼうとしています。理論的な質問はどれほど難しいですか? DATE_OF_BIRTH、GENDER、RACE、ETHNICITYの列を持つDEMOGRAPHICSテーブルがあるとします。そして、車の異なるメーカー(トヨタ、フォードなど)を列挙する列MAKEを持つCAR表。男性の女性、女性、白人、アジア人、黒人、ヒスパニック、ヒスパニックではない列、2つの年齢層の列(18歳から30歳、50歳から70歳)の列にそれぞれの車種とそれに対応する割合率をリストする統計レポートを作成するにはどうすればよいですか。パーセントは小数点以下2桁まで切り上げる必要があります。これは次のようになります。 enter image description here 類似のクエリへの参照を含め、何か助けていただければ幸いです。 ありがとうございました!統計レポートのPL/SQLクエリ?

答えて

0

さらに詳しい情報が必要です。 BLACK ASIAN WHITE、< ==は、これらの ヒスパニックではなく、ヒスパニック系< ==は、これらの民族列

+0

の下に落ちているRACE列の下に落ちているの返信ありがとうございます! WHITE、ASIAN、BLACKはRACE、HISPANIC、HISPANICではなくHISPANICです。なぜあなたは最初に両方のテーブルをドロップしたのですか?両方のテーブルに何千ものリスティングがあるとします.1つ1つずつ新しいテーブルに挿入するのは効率的ではありません。 – icittar

+0

ドロップは不要ですが、スキーマ内にdemographicsという名前のテーブルがすでにあるため、削除しました –

0
drop table demographics 

drop table car 

create table car(MAKE_ID number primary key, MAKE varchar2(30)); 

create table demographics(DATE_OF_BIRTH date , GENDER varchar2(10), RACE varchar2(30), ETHNICITY varchar2(30), MAKE_ID references car); 

--insert into car table 
insert into car values(1,'Toyota'); 
insert into car values(2,'Ford'); 
insert into car values(3,'GM'); 

--inserts 1000 rows into the demographics table 
insert into demographics 
select trunc(sysdate) - level as dob 
     ,case when mod(level,2)=0 then 'MALE' else 'FEMALE' end as gender 
     ,case when mod(level,2)=0 then 'WHITE' else 'BLACK' end as race 
     ,case when mod(level,4)=0 then 'ASIAN' 
       when mod(level,3)=0 then 'HISPANIC' 
       when mod(level,2)=0 then 'NOT HISPANIC' 
       else 'LATINO' 
     end as ethnicity 
     ,case when mod(level,3)=0 then 3 
       when mod(level,2)=0 then 2 
       when mod(level,1)=0 then 1 
     end as make_id  
from dual 
connect by level<=1000; 


select make 
     ,round((cnt_MAKE/tot_cnt)*100,2) as MALE_PERCENT 
    ,round((cnt_MAKE/tot_cnt)*100,2) as FEMALE_PERCENT 
from(  
select a.make 
     ,count(case when b.gender ='MALE' then 1 end) as cnt_MALE 
     ,count(case when b.gender ='FEMALE' then 1 end) as cnt_FEMALE 
     ,count(case when b.race ='WHITE' then 1 end) as cnt_WHITE 
     ,count(case when b.ethnicity ='ASIAN' then 1 end) as cnt_ASIAN 
     ,count(case when b.race ='BLACK' then 1 end) as cnt_BLACK 
     ,count(case when b.ethnicity ='HISPANIC' then 1 end) as cnt_HISPANIC 
     ,count(case when b.ethnicity ='NOT HISPANIC' then 1 end) as cnt_NOT_HISPANIC 
     ,count(*) as tot_cnt   
    from car a 
    join demographics b 
    on a.make_id=b.make_id 
group by a.make 
) 
関連する問題