#GROUP BY句
まずはちょっと今回のサンプルテーブルを、、、
下記の表は、4人の名前と国語と数学のテストの点数とクラスをまとめた表を使います!
| name | jp_score | math_score | class_cd |
|----------|----------|------------|----------|
| tanaka | 60 | 80 | 1-A |
| satou | 70 | 70 | 1-B |
| suzuki | 80 | 60 | 1-A |
| yamamoto | 50 | 30 | 1-A |
#ハマったこと
GROUP BYしてみよっと!
SELECT
class_cd
,jp_score
,math_score
FROM
test_score
GROUP BY
class_cd
;
察しのいい方はお気づきかもしれませんが、出力結果はこんな感じになります!
| class_cd | jp_score | math_score |
|----------|----------|------------|
| 1-A | 60 | 80 |
| 1-B | 70 | 70 |
あれ????
GROUP BY句でまとめた1-Aクラスのレコードってtanakaさんの点数になってるよ??
どうしてこうなるんだろ?っていうのがなかなか理解できなかった!
#GROUP BYしたときの表の形(自分なりの考え)
リファレンスとかサイトとかいろいろ流し読みしてみたけどなかなか理解できなかったので、2次元配列的に考えてみることにした。
test_scoreテーブルを2次元配列にするとこんな感じ
Array[[]] table = [
["tanaka", 60, 80, "1-A"]
,["satou", 70, 70, "1-B"]
,["suzuki", 80, 60, "1-A"]
,["yamamoto", 50, 30, "1-A"]
];
わかりやすくしたくて、内包型配列で書いちゃったけど、、、笑
これをGROUP BYしたらどうなるのかっていうのを自力で考えました!
こちらです!
Array[[[]]] table = [
[["tanaka", 60, 80], ["suzuki", 80, 60], ["yamamoto", 50, 30] ,"1-A"]
,[["satou", 70, 70] ,"1-B"]
];
GROUP BYで選択したカラム以外のカラムをひとつの配列にまとめてるのかな?
それで
SELECT
jp_score, math_score
したときはtable[0][1]
とtable[1][0]
だけが出力されるイメージなのかな?
これなら1-Aグループがtanakaくんしか表示されなかった理由も納得だし!
#結論
group by したら、選択したカラムの値1 要素として選択されなかったカラム値群は配列になる!(と考えた)
#終わりに
初学者なので間違っているかもしれませんが、厳しくご指摘してくださったら幸いです!
つたない内容でしたが、ここまで読んでいただきありがとうございました☆
(、、、もしかしてプロパティ配列位にしたほうがよかったかな?でも書き方わからないなあ、、、)