1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLのGROUP BY句で混乱したので考えをまとめてみる

Last updated at Posted at 2019-06-08

#GROUP BY句
まずはちょっと今回のサンプルテーブルを、、、
下記の表は、4人の名前と国語と数学のテストの点数とクラスをまとめた表を使います!

student_scores
|     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してみよっと!

group_by.sql
SELECT
  class_cd
  ,jp_score
  ,math_score
FROM
  test_score
GROUP BY
  class_cd
;

察しのいい方はお気づきかもしれませんが、出力結果はこんな感じになります!

result
| 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次元配列にするとこんな感じ

table
Array[[]] table = [ 
	            ["tanaka",   60, 80, "1-A"]
	           ,["satou",    70, 70, "1-B"]
	           ,["suzuki",   80, 60, "1-A"]
	           ,["yamamoto", 50, 30, "1-A"]
	           ];

わかりやすくしたくて、内包型配列で書いちゃったけど、、、笑

これをGROUP BYしたらどうなるのかっていうのを自力で考えました!
こちらです!

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 要素として選択されなかったカラム値群は配列になる!(と考えた)

#終わりに
初学者なので間違っているかもしれませんが、厳しくご指摘してくださったら幸いです!
つたない内容でしたが、ここまで読んでいただきありがとうございました☆

(、、、もしかしてプロパティ配列位にしたほうがよかったかな?でも書き方わからないなあ、、、)

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?