質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

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

Q&A

2回答

417閲覧

SQL 2テーブルを軸として、1テーブルの個数を取得をしたいです。

sugimountain

総合スコア0

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

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

0グッド

0クリップ

投稿2022/11/17 13:49

編集2022/11/17 13:54

オラクルSQLの質問です
下記テーブルを結合し、種別を軸として、場所とアイテムの個数をセレクトしたいです。

テーブル内容

・placeテーブル(アイテムの場所が格納されている)
・kindテーブル(アイテムの種別が格納されている)
・itemテーブル(アイテムごとに、アイテムid、種別、場所が格納されている)

取得要件

種別や場所で、アイテムが存在しなくても、場所とアイテム数(0)を表示する
なので、種別と場所は全パターン表示できるようにしたいです

セレクト結果イメージ

場所種別アイテム数
20
0
鉛筆0
鉛筆1

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

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

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

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

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

guest

回答2

0

以下のクエリで期待した結果が得られますか?

  1. placeテーブルとkindテーブルをCROSS JOINして全組み合わせを作成。 → t1
  2. itemテーブルを場所と種別でグループ化してアイテム数を算出。 → t2
  3. t1にt2をLEFT JOINで結合。
  4. アイテムが存在しない場合はNULLになるので、COALESCEでNULLの場合は0にする。
  5. 場所と種別でソート。

sql

1CREATE TABLE place (場所id NUMBER, 場所 VARCHAR2(10)); 2INSERT INTO place VALUES(1,'本'); 3INSERT INTO place VALUES(2,'鉛筆'); 4 5CREATE TABLE kind (種別id NUMBER, 種別 VARCHAR2(10)); 6INSERT INTO kind VALUES(1,'棚'); 7INSERT INTO kind VALUES(2,'机'); 8 9CREATE TABLE item (アイテムid NUMBER, 場所id NUMBER, 種別id NUMBER); 10INSERT INTO item VALUES(1,1,1); 11INSERT INTO item VALUES(2,1,1); 12INSERT INTO item VALUES(3,1,1); 13INSERT INTO item VALUES(4,2,2); 14 15SELECT 16 t1.場所, 17 t1.種別, 18 COALESCE(t2.アイテム数, 0) アイテム数 19FROM 20 (SELECT p.場所id, k.種別id, p.場所, k.種別 FROM place p CROSS JOIN kind k) t1 21 LEFT JOIN 22 (SELECT 場所id, 種別id, COUNT(*) アイテム数 FROM item GROUP BY 場所id, 種別id) t2 23 ON t1.場所id = t2.場所id AND t1.種別id = t2.種別id 24ORDER BY t1.場所id, t1.種別id;

投稿2022/11/18 15:33

etsuhisa

総合スコア416

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

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

0

アイテムが存在しなくても、場所とアイテム数(0)を表示する
種別と場所は全パターン表示できるようにしたいです

itemテーブル(アイテムごとに、アイテムid、種別、場所が格納されている)

種別と場所を繋ぐのがアイテムなので、アイテムがなければそれらの関係は不明です。

種別と場所の総当たりで、アイテムがある所だけ表示という事なら可能だと思いますけど。

投稿2022/11/17 16:38

編集2022/11/17 16:39
sazi

総合スコア25195

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問