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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Q&A

解決済

2回答

2710閲覧

【MySQL】成績表を作成したい

ysda

総合スコア65

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

0グッド

0クリップ

投稿2020/09/07 02:33

編集2020/09/07 02:38

前提・実現したいこと

以下の3つのテーブルを使用し、生徒ごとの5科目の成績表を作成したいと考えています。

studentテーブル

student_id(生徒ID)student_name(生徒名)student_furigana(生徒カナ)school_year(学年)school_class(クラス)

格納データ
イメージ説明

subjectテーブル

subject_id(教科ID)subject_name(教科名)

格納データ
イメージ説明

test_resultsテーブル
※student_id→studentテーブルの外部キー
※subject_id→subject_idテーブルの外部キー

student_id(外部キー)subject_id(外部キー)score(得点)test_day(試験日)

格納データ
イメージ説明

3テーブルを結合し、試験日ごとに以下のようなテーブルを作成したいと考えています。
(該当の日付に試験が行われなかった科目については斜線などで表示)

取得したいテーブル
|試験日|学年|クラス|生徒ID|名前|国語点数|数学点数|英語点数|理科点数|社会点数|
|:--|:--:|--:|

発生している問題・エラーメッセージ

現状、テーブルを結合して、試験日・学年・クラス・生徒ID・生徒名・科目ID・科目名・得点までは取得できているのですが(下画像)、どのようにすれば上記のように全科目を一つのレコードになるかがわからず(調べ方も、どのようなキーワードで検索すればいいのかが見当つかない)、こちらの解決方法につきましてご教示いただけますと幸いです。

現在取得できているテーブル
イメージ説明
↑の結果を得るためのSQL文

select test_day, student.school_year, student.school_class,student.student_id, student.student_name, subject.subject_id, subject.subject_name, score from test_results inner join student on student.student_id = test_results.student_id inner join subject on subject.subject_id = test_results.subject_id;

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

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

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

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

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

m.ts10806

2020/09/07 02:35

>全科目を一つのレコード どのように出力したいのか図示してください。 あまりSQLをこねくり回し過ぎるのもバグの元ですし、アプリケーション側で整形しても良いのではと思いますが・
ysda

2020/09/07 02:45

コメントありがとうございます。 質問文のほうにその取得したいカラムについて記述しておりましたが、書く位置がわかりづらかったので修正しました。 コメントのほうでも記載致します。 ↓取得したい内容 試験日、学年、クラス、生徒ID、名前、国語点数、数学点数、英語点数、理科点数、社会点数 >アプリケーション側で整形しても良いのでは 私も最初はアプリケーション側で制御しようと考えていたのですが、それがうまくいかず、SQL側で制御しようとなった経緯がございます。 ちなみにアプリケーション側での内容につきましては、こちら→https://teratail.com/questions/289391で質問させていただいております。
yambejp

2020/09/07 02:56

サンプルデータがないと回答しづらいので create table+insertでいくつかサンプルを提供し ほしい結果を別途提示ください
guest

回答2

0

投稿2020/09/07 05:31

sazi

総合スコア25195

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

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

ysda

2020/09/07 06:39

ご回答ありがとうございます。 有益な情報をご共有くださり、誠にありがとうございます。
guest

0

ベストアンサー

test_dayとstudent_idでgroup byして

sum((subject_id=1)*score) as 国語

のように受け取ってください

投稿2020/09/07 03:00

yambejp

総合スコア114839

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

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

ysda

2020/09/07 06:38

ご回答ありがとうございます。 こちらの文で期待通りの取得をすることができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問