始めまして。ビギナーと申します。
こちらでは初めての質問なので、不手際が多々あると思いますが、どうかご容赦ください。
SQLの課題なのですが、
「JOINを使わずに2つのテーブルを利用して、
グループ毎の会員数を取得。更に01~04の4項目必須(0を表示する)」
この課題がもう3日解けていません。
GROUP_ID 04 がどう頑張っても0で表示されません。(項目にも現れません)
発生している問題・エラーメッセージ
下記コードだと、カウントはちゃんととれるのですが、GROUP_ID 04がそもそも項目に表示されません
該当のソースコード
OracleDB,SQL
1私の回答(0の表示なし) 2select grouptable.group_id,count(membertable.group_id) 3from grouptable,membertable 4where grouptable.group_id = membertable.group_id 5group by grouptable.group_id; 6 7テーブル、データのコード 8 CREATE TABLE GROUPTABLE 9 (GROUP_ID CHAR(2 BYTE), 10 GROUP_NAME VARCHAR2(20 BYTE), 11 AREA VARCHAR2(10 BYTE)) 12 13Insert into GROUPTABLE (GROUP_ID,GROUP_NAME,AREA) values ('01','新宿Aグループ','新宿'); 14Insert into GROUPTABLE (GROUP_ID,GROUP_NAME,AREA) values ('02','新宿Bグループ','新宿'); 15Insert into GROUPTABLE (GROUP_ID,GROUP_NAME,AREA) values ('03','渋谷Aグループ','渋谷'); 16Insert into GROUPTABLE (GROUP_ID,GROUP_NAME,AREA) values ('04','渋谷Bグループ','渋谷'); 17 18 CREATE TABLE MEMBERTABLE 19 (MEMBER_ID CHAR(3 BYTE), 20 AGE NUMBER(2,0), 21 GROUP_ID CHAR(2 BYTE)) 22 23Insert into MEMBERTABLE (MEMBER_ID,AGE,GROUP_ID) values ('001',20,'02'); 24Insert into MEMBERTABLE (MEMBER_ID,AGE,GROUP_ID) values ('002',30,'03'); 25Insert into MEMBERTABLE (MEMBER_ID,AGE,GROUP_ID) values ('003',60,'01'); 26Insert into MEMBERTABLE (MEMBER_ID,AGE,GROUP_ID) values ('004',40,'03'); 27Insert into MEMBERTABLE (MEMBER_ID,AGE,GROUP_ID) values ('005',40,'02'); 28Insert into MEMBERTABLE (MEMBER_ID,AGE,GROUP_ID) values ('006',50,'03');
試したこと
あらゆる事を試しましたが、力及ばず条件を満たせませんでした。
どうか皆様のご教授を頂けますと幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
サンプルを画像でつけるのは結構ですが、あわせてテキストでもつけてください
どのRDBMSを想定した課題なのでしょうか。
というか、これまで学んだことを逸脱する課題って出ないと思いますが
配慮が足りず、申し訳ありません。
テーブルとデータのコードを追記いたしました。
OracleDBを想定した課題です。
この問題は、逸脱しているのでしょうか・・?SQLは学び始めたばかりでその判断もできておりません
入門用としてはハードルが高過ぎる問題ですね。
同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう! https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html
コードは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。
通常、特別な理由がない限り、SYS, SYSTEMなどOracle側のスキーマにCREATE TABLEするようなことはしません。CREATE USERと必要な権限をGRANT したスキーマにテーブルを作ります。
これを守っていないと、開発環境から本番環境に移行したり、データベースのバージョンをアップする時に必ず問題になります。
テーブル名や列名のダブルクォーティングは通常行いません。
ダブルクォーティングするならすべてのSQLでそのテーブル名なり列名なりを必ずダブルクォーティングします。
実務ではハイフンを含んだテーブル名を使っていたお客様が1社だけあってダブルクォーティングが必要でした。
Orlofsky様
大変遅くなってしまい、申し訳ありません。
とても為になるアドバイスと、ご教示本当にありがとうございます。
頂いたコメントを参考に、修正致しました!
解決後も、こんなにも親身なコメントを頂けるとは思ってもいませんでした。
実務でのご経験を教えて下さるのは、今の私にとってすごく助かります。
特にSQLのバージョンや、どのデータベースか については教えていただいたURL先を参考に勉強致します。
改めて、ありがとうございます。
回答2件
あなたの回答
tips
プレビュー