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

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

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

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

Q&A

解決済

1回答

772閲覧

全体を出力する方法がわからない

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

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

0グッド

0クリップ

投稿2020/09/12 04:30

前提・実現したいこと

SQLの出力方法でわからないことがあるので教えてください。

【従業員マスタ】
従業員コード 従業員名
A1 山田
A2 田中
B1 佐藤
B2 梨田
C1 鈴木

【年齢マスタ】
従業員コード 年齢
A1 16
A2 14
B1 6
B2 4
C1 3

【種族マスタ】
従業員コード 種族
A1 人間
A2 人間
B1 哺乳類
B2 哺乳類
C1 爬虫類

とあって、種族ごとの平均年齢を出力したいのですがどうもうまくいきません。


<期待している出力>
従業員コード 従業員名 年齢 種族 平均年齢(種族)
A1 山田 16 人間 15
A2 田中 14 人間 15
B1 佐藤 6 哺乳類 5
B2 梨田 4 哺乳類 5
C1 鈴木 3 爬虫類 3

試したこと

INNER JOINを使って従業員マスタから年齢、種族マスタを結合し、
group byで種族マスタを指定しているのですが、どうも
種族 平均年齢(種族)
人間 15
哺乳類 5
爬虫類 3
という感じにしかならないです。
私としては全体のデータが出力できるようにしたいですがどのようにすればいいでしょうか・・・?

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

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

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

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

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

unhappychoice

2020/09/12 04:34

SQL のコードを掲載してください
gentaro

2020/09/12 04:39

そもそもテーブル設計がおかしいように見えます。 「年齢マスタ」「種族マスタ」というのは「マスタ」ではなく、明らかに「従業員」の従属情報です。 まずテーブルを分ける意味がわかりません。 仮に分ける理由があるとして、あなたが書いたSQLがどんなものなのかを明示しない場合、ただの「丸投げ」です。
m.ts10806

2020/09/12 08:07

従業員と年齢をわける必要性を感じませんが、どういう設計思想でそのようにされているのでしょうか。
guest

回答1

0

ベストアンサー

INNER JOINを使って従業員マスタから年齢、種族マスタを結合し、
group byで種族マスタを指定しているのですが

私としては全体のデータが出力できるようにしたい

要求は、group byの単位が違うものですから、同時にはできません。

SQL

1select m1.従業員コード, 従業員名, 年齢, 種族 2 , (select avg(年齢) 3 from 年齢マスタ s2 4 inner join 種族マスタ s3 5 on s2.従業員コード=s3.従業員コード 6 where s3.種族=m3.種族 7 ) as 平均年齢(種族) 8from 従業員マスタ m1 9 inner join 年齢マスタ m2 10 on m1.従業員コード=m2.従業員コード 11 inner join 種族マスタm3 12 on m1.従業員コード=m3.従業員コード

分析関数の使えるDBMSなら簡潔な記述にできます。

SQL

1select m1.従業員コード, 従業員名, 年齢, 種族 2 , avg(年齢) over(partition by 種族) as 平均年齢(種族) 3from 従業員マスタ m1 4 inner join 年齢マスタ m2 5 on m1.従業員コード=m2.従業員コード 6 inner join 種族マスタm3 7 on m1.従業員コード=m3.従業員コード

投稿2020/09/13 15:31

編集2020/09/13 15:31
sazi

総合スコア25327

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問