🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

625閲覧

制約のあるSQLで0を表示するには

im_a_begginer

総合スコア7

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/11/29 08:54

編集2019/12/02 00:52

始めまして。ビギナーと申します。
こちらでは初めての質問なので、不手際が多々あると思いますが、どうかご容赦ください。

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/11/29 09:00

サンプルを画像でつけるのは結構ですが、あわせてテキストでもつけてください
m.ts10806

2019/11/29 09:06

どのRDBMSを想定した課題なのでしょうか。 というか、これまで学んだことを逸脱する課題って出ないと思いますが
im_a_begginer

2019/11/29 09:09

配慮が足りず、申し訳ありません。 テーブルとデータのコードを追記いたしました。 OracleDBを想定した課題です。 この問題は、逸脱しているのでしょうか・・?SQLは学び始めたばかりでその判断もできておりません
Orlofsky

2019/11/30 01:30

入門用としてはハードルが高過ぎる問題ですね。 同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう! https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html
Orlofsky

2019/11/30 01:44

通常、特別な理由がない限り、SYS, SYSTEMなどOracle側のスキーマにCREATE TABLEするようなことはしません。CREATE USERと必要な権限をGRANT したスキーマにテーブルを作ります。 これを守っていないと、開発環境から本番環境に移行したり、データベースのバージョンをアップする時に必ず問題になります。
Orlofsky

2019/11/30 01:48

テーブル名や列名のダブルクォーティングは通常行いません。 ダブルクォーティングするならすべてのSQLでそのテーブル名なり列名なりを必ずダブルクォーティングします。 実務ではハイフンを含んだテーブル名を使っていたお客様が1社だけあってダブルクォーティングが必要でした。
im_a_begginer

2019/12/02 00:59

Orlofsky様 大変遅くなってしまい、申し訳ありません。 とても為になるアドバイスと、ご教示本当にありがとうございます。 頂いたコメントを参考に、修正致しました! 解決後も、こんなにも親身なコメントを頂けるとは思ってもいませんでした。 実務でのご経験を教えて下さるのは、今の私にとってすごく助かります。 特にSQLのバージョンや、どのデータベースか については教えていただいたURL先を参考に勉強致します。 改めて、ありがとうございます。
guest

回答2

0

LEFT JOIN のほうがいいかと思いますが

SQL

1SELECT G.GROUP_ID, (SELECT COUNT(*) FROM MEMBERTABLE M WHERE M.GROUP_ID = G.GROUP_ID) 2FROM GROUPTABLE G

投稿2019/11/29 09:16

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

im_a_begginer

2019/11/29 09:33

回答ありがとうございました! 本当に助かりました! 同じ回答を頂けたので、時間を参考に致しました。 お二人ともベストアンサーにできないのが心苦しいです。 機会がありましたら、また宜しくお願いいたします。
guest

0

ベストアンサー

SQL

1select group_id,(select count(*) from MEMBERTABLE where group_id=t1.group_id) as cnt 2from GROUPTABLE as t1

投稿2019/11/29 09:15

yambejp

総合スコア116661

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

im_a_begginer

2019/11/29 09:31

ありがとうございます!!無事解決できました。 同じ回答を頂けたのですが、回答頂けた時間を参考にいたしました。 機会がありましたら、また宜しくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問