目的
- 自分のgroup by句に対する知識があやふやなので基本的な部分を固めてみる。
- 下記の記事で書いているのに若干まだ理解できていない。これは恥ずかしい。
環境
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2 GHz クアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境
項目 | 情報 | 備考 |
---|---|---|
MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする |
情報
- Macに直接MySQLのサーバーを立てて実際にSQLを実行してgroup by句を体験してみることとする。
- 「環境」に記載された条件でgroup by句を体験してみる。
条件
- MySQLにターミナルからログインする事ができること。(パスワードなどがわからなくなってしまった方はこちら→Mac ローカル環境の MySQL 8.x のrootパスワードを忘れた時のリセット方法)
-
下記SQLを実行してテスト用データベースとテーブルを作成した。
create database group_by_test; use group_by_test; create table users( id int, user_flag int, age int, name varchar(255) ); insert into users value(1, 1, 20, 'user1'); insert into users value(2, 1, 22, 'user2'); insert into users value(3, 2, 18, 'user3'); insert into users value(4, 1, 16, 'user4'); insert into users value(5, 2, 22, 'user5'); insert into users value(6, 1, 10, 'user6');
-
上記のSQLを実行したあとのusersテーブルの状態を下記に記載する。
mysql> select * from users; +------+-----------+------+-------+ | id | user_flag | age | name | +------+-----------+------+-------+ | 1 | 1 | 20 | user1 | | 2 | 1 | 22 | user2 | | 3 | 2 | 18 | user3 | | 4 | 1 | 16 | user4 | | 5 | 2 | 22 | user5 | | 6 | 1 | 10 | user6 | +------+-----------+------+-------+
体験
-
下記を実行してuser_flagが1と2のユーザーの年齢の平均値を別々に出力してみる。
select user_flag, avg(age) as avg_age from users group by user_flag;
-
下記のように出力された。
+-----------+---------+ | user_flag | avg_age | +-----------+---------+ | 1 | 17.0000 | | 2 | 20.0000 | +-----------+---------+
group by句は「出力結果を指定したカラムでまとめてくれる」とおぼえておこう。