MySQLについて質問です。
以下のテーブルがあった場合に、
population、sex、Gradesを
一覧表示するにはどうしたらいいですか?
※Aテーブルのclass_idとBテーブルの
Top_scorer_idは連動しているものとする。
(Top_scorer_idに3が表示されたら、
鈴木圭さんということ)
Aテーブル:
No people_nm class_id sex
1 佐藤花子 1 女
2 山田優人 1 男
3 鈴木圭 1 男
4 高橋和子 2 女
5 山本新太郎 2 男
6 小林太郎 2 男
7 田中いちか 3 女
8 吉田大輝 3 男
9 河上のぼる 3 女
Bテーブル:
Id Top_scorer_id date
1 3 2017-03-01
2 1 2017-01-07
3 4 2017-12-05
4 1 2018-03-09
5 8 2018-09-06
6 6 2018-11-08
7 9 2018-05-02
8 3 2018-07-01
9 7 2018-02-08
10 3 2018-07-23
Cテーブル:
class_id class_nm
1 赤クラス
2 青クラス
3 黄色クラス
上記の3つのテーブルで、クラスごとに
Top_score_idの重複した数、クラスごとの
男女の人数、2018年の各クラスのTop_scorer_id
に選ばれた回数をそれぞれ一覧表示するには
どうしたらよいでしょうか。
ご教授よろしくお願いします。
No.3ベストアンサー
- 回答日時:
取得してみました。
集計の意図が異なる場合は、正しい内容を補足してください。
-- クラスごとにTop_score_idの重複した数
select
c.class_nm
,e.top_scorer_people_id
,p.people_nm
,count(e.exam_date) as トップスコア数
from
exam e, people p, class c
where
e.top_scorer_people_id = p.people_id
and p.class_id = c.class_id
group by
c.class_nm
,e.top_scorer_people_id
,p.people_nm
;
-- クラスごとの男女の人数
select
c.class_nm
,p.sex
,count(p.people_id) as 人数
from
people p, class c
where
p.class_id = c.class_id
group by
c.class_nm
,p.sex
;
-- 2018年の各クラスのTop_scorer_idに選ばれた回数
select
c.class_nm
,count(e.exam_date) as トップスコア数
from
exam e, people p, class c
where
e.exam_date between '2018-01-01' and '2018-12-31'
and e.top_scorer_people_id = p.people_id
and p.class_id = c.class_id
group by
c.class_nm
;
No.2
- 回答日時:
補足ありがとうございます。
「名は体を表す」
・テーブル名がAだのBだのでは、何のテーブルなんだかさっぱりわかりません。
・カラム名も同様です。
Aテーブルの「No」列。何の番号なの?となります。
そのような部分を整理しないと、DBを効率よく操ることはできません。
「結合条件」
・データ設計の基本的な内容です。
それがわからないことには、各テーブルからどのようにデータを取得するかなんて決められません。
補足いただいた内容から、テーブル名、カラム名を整理してみました。
具体的な抽出方法は、後で考えて回答します。
peopleテーブル:
people_id people_nm class_id sex
1 佐藤花子 1 女
2 山田優人 1 男
3 鈴木圭 1 男
4 高橋和子 2 女
5 山本新太郎 2 男
6 小林太郎 2 男
7 田中いちか 3 女
8 吉田大輝 3 男
9 河上のぼる 3 女
examテーブル:
exam_id top_scorer_people_id exam_date
1 3 2017-03-01
2 1 2017-01-07
3 4 2017-12-05
4 1 2018-03-09
5 8 2018-09-06
6 6 2018-11-08
7 9 2018-05-02
8 3 2018-07-01
9 7 2018-02-08
10 3 2018-07-23
classテーブル:
class_id class_nm
1 赤クラス
2 青クラス
3 黄色クラス
結合条件
peopleテーブル.people_id = examテーブル.top_scorer_people_id
peopleテーブル.class_id = classテーブル.class_id
No.1
- 回答日時:
仕様を整理してください。
・テーブル名、カラム名について、「名は体を表す」ように改めてください。
・各テーブルの結合条件を教えてください。
・鈴木圭さんのclass_idは1ですが、Top_scorer_idとどのように連動させるのですか?
・population、Gradesは、何ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- MySQL mysqlの結合について教えてください 1 2022/05/19 15:13
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
selectした大量データをinsert...
-
副問合せの書き方について
-
ある条件の最大値+1を初番する...
-
マイクラPC版のコマンドで効率...
-
VIEWの元のテーブルのindexって...
-
1対多結合で多を絞り込み条件と...
-
load dataするときに、最後の列...
-
SELECT句の指定フィールドに固...
-
NOT NULL 制約の削除
-
複数updateする時に・・・
-
Mysql UPDATE出来ません
-
複数DBテーブルからのデータ取得
-
MySQLでのバイナリデータ削除方法
-
#1136 - Column count doesn't ...
-
VBAでボタンをクリックする方法...
-
エクセルの関数について教えて...
-
MySQLのAVGでWHERE句を使い条件...
-
accessに対してSQL文を発行する...
-
Unionした最後にGROUP BYを追加...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報
ご回答いただきありがとうございます。
>テーブル名、カラム名について、「名は体を
表す」ように改めてください。
→無知ですみません。どういうことでしょうか。
>各テーブルの結合条件を教えてください。
→結合条件が分からなくて困っています。。。
>鈴木圭さんのclass_idは1ですが、Top_scorer_id
とどのように連動させるのですか?
→これは例えば、鈴木圭さんはNoが3なので、
BテーブルのTop_scorer_idを見ると、3と
記載があるので、鈴木さんがトップだと分かります。
なので、クラスごとに分ける結合条件としては、
No(1,2,3)→class_id(1)
No(3,4,5)→class_id(2)
のような形を考えています。
→population、Gradesは何ですか?
→人数と成績です。
さらなるご回答いただきありがとうございます。
「名は体を表す」の意味がよく分かりました。
質問本文が分かりづらくすみません。
Aテーブル、Bテーブルはテーブルの名前です。
申し訳ありません、急いでいたので、
テーブル名を適当につけてしまいました。
A列のNoというのは出席番号のようなものだと
考えております。つまり、Noが1ならイコール
佐藤花子さんだという形です。
なぜか、列をしっかり分けて書いたにも関わらず
列が分かれていなくて、カラムがすごく分かりにく
なってしまっております。申し訳ありません。
左から記載しておりますので、順に
カラム名と一致する値が内容になります。
本当にありがとうございます。
後ほどご回答いただけるということで、
よろしくお願いいたします。