*ブログに戻る →ここ です。


GROUP BY句
カラムの値が重複しているものをグループとして平均を求める 株価の平均に使えるね free92

Friday,August,2,2013

sada_d       sada_name          sada_ price  sada_category
 20130802    Toyota             6220         Car             *グループt(sada_name)
 20130802    Mazda               400         Car             *グループm(sada_name)
 20130802    Honda              3725         Car             *グループh(sada_name)
 20130802    Suzuki             2400         Car               以下下につづく
 20130802    Mitsubishi motors  1300         Car                     ↓
 20130802    Daihatsu           2200         Car                     ↓
 20130802    Sony               2000         Home electronics        ↓
 20130802    Panasonic           900         Home electronics        ↓
 20130802    Sharp               400         Home electronics
 20130802    Dena               2000         It
 20130802    Rakuten            1300         It
 20130802    Gungho           100000         It

 20130105    Toyota             4200        Car              *グループt(sada_name)
 20130105    Mazda               180        Car              *グループm(sada_name)
 20130105    Honda              3400        Car              *グループh(sada_name)
 20130105    Suzuki             2400        Car
 20130105    Mitsubishi motors   850        Car
 20130105    Daihatsu           1750        Car
 20130105    Sony               1000        Home electronics
 20130105    Panasonic           550        Home electronics
 20130105    Sharp               300        Home electronics
 20130105    Dena               3000        It
 20130105    Rakuten             700        It
 20130105    Gungho            10000

 20120601    Toyota             3000         Car              *グループt(sada_name)
 20120601    Mazda               100         Car              *グループm(sada_name)
 20120601    Honda              2500         Car              *グループh(sada_name)
 20120601    Suzuki             1600         Car
 20120601    Mitsubishi motors   800         Car
 20120601    Daihatsu           1300         Car
 20120601    Sony               1000         Home electronics
 20120601    Panasonic           550         Home electronics
 20120601    Sharp               400         Home electronics
 20120601    Dena               1500         It
 20120601    Rakuten             800         It
 20120601    Gungho                0         It


○テーブル設定メモ
VARCHAR型なら、unique  その他のオプション default 'データなし', default 0, not null(データなし を許さない)
INT型なら、primary key

○テーブルを作る           ↓db名          ↓テーブル名 ↓カラム名  ↓カラム名 ↓型(文字を格納)
mysql> create table sadachika_shop.sadachi_marketsjp(sada_d date, sada_name varchar(20) default '銘柄データなし', sada_price int,
    -> sada_category varchar(20) default 'カテデータなし');  ↑型(日付を格納)
Query OK, 0 rows affected (0.09 sec)

○テーブルの削除場合はこんな感じ
mysql> drop table sadachika_shop.sadachi_marketsjp;  *テーブルを作る際に間違えたらカラム追加や訂正より削除のほうが簡単
Query OK, 0 rows affected (0.22 sec)

○カラムの構造を見る
mysql> show columns from sadachika_shop.sadachi_marketsjp;
Field          Type         Null   Key    Default        Extra
sada_d         date         YES           NULL
sada_name      varchar(10)  YES           銘柄データなし 
sada_price     int(11)      YES           NULL
sada_category  varchar(10)  YES           カテデータなし
4 rows in set (0.02 sec)

○値を入力する
mysql> insert into sadachika_shop.sadachi_marketsjp values 
    ->(20130802,'Toyota',6220,'Car'),(20130802,'Mazda',400,'Car'),(20130802,'Honda',3725,'Car'),(20130802,'Suzuki',2400,'Car'),
    ->(20130802,'Mitsubishi motors',1300,'Car'),(20130802,'Daihatsu',2200,'Car'),(20130802,'Sony',2000,'Home electronics'),
    ->(20130802,'Panasonic',900,'Home electronics'),(20130802,'Sharp',400,'Home electronics'),(20130802,'Dena',2000,'It'), 
    ->(20130802,'Rakuten',1300,'It'),(20130802,'Gungho',100000,'It');
Query OK, 12 rows affected (0.03 sec)
Records: 12 Duplicates: 0 Warnings: 0

mysql> insert into sadachika_shop.sadachi_marketsjp values 
    ->(20130105,'Toyota',4200,'Car'),(20130105,'Mazda',180,'Car'),(20130105,'Honda',3400,'Car'),(20130105,'Suzuki',2400,'Car'),
    ->(20130105,'Mitsubishi motors',850,'Car'),(20130105,'Daihatsu',1750,'Car'),(20130105,'Sony',1000,'Home electronics'),
    ->(20130105,'Panasonic',550,'Home electronics'),(20130105,'Sharp',300,'Home electronics'),(20130105,'Dena',3000,'It'), 
    ->(20130105,'Rakuten',700,'It'),(20130105,'Gungho',10000,'It');
Query OK, 12 rows affected (0.03 sec)
Records: 12 Duplicates: 0 Warnings: 0

mysql> insert into sadachika_shop.sadachi_marketsjp values 
    ->(20120601,'Toyota',3000,'Car'),(20120601,'Mazda',100,'Car'),(20120601,'Honda',2500,'Car'),(20120601,'Suzuki',1600,'Car'),
    ->(20120601,'Mitsubishi motors',800,'Car'),(20120601,'Daihatsu',1300,'Car'),(20120601,'Sony',1000,'Home electronics'),
    ->(20120601,'Panasonic',550,'Home electronics'),(20120601,'Sharp',400,'Home electronics'),(20120601,'Dena',1500,'It'), 
    ->(20120601,'Rakuten',800,'It'),(20120601,'Gungho',0,'It');
Query OK, 12 rows affected (0.03 sec)
Records: 12 Duplicates: 0 Warnings: 0

○テーブルの中身の表示 
mysql> select * from sadachika_shop.sadachi_marketsjp;
 sada_d        sada_name          sada_price  sada_category
 2013-08-02    Toyota                   6220  Car             *グループt(sada_name)20130802
 2013-08-02    Mazda                     400  Car             *グループm(sada_name)20130802
 2013-08-02    Honda                    3725  Car             *グループh(sada_name)20130802
 2013-08-02    Suzuki                   2400  Car               以下下につづく
 2013-08-02    Mitsubishi motors        1300  Car                     ↓
 2013-08-02    Daihatsu                 2200  Car                     ↓
 2013-08-02    Sony                     2000  Home electronics        ↓
 2013-08-02    Panasonic                 900  Home electronics        ↓
 2013-08-02    Sharp                     400  Home electronics
 2013-08-02    Dena                     2000  It
 2013-08-02    Rakuten                  1300  It
 2013-08-02    Gungho                 100000  It
 2013-01-05    Toyota                   4200  Car             *グループt(sada_name)20130105
 2013-01-05    Mazda                     180  Car             *グループm(sada_name)20130105
 2013-01-05    Honda                    3400  Car
 2013-01-05    Suzuki                   2400  Car
 2013-01-05    Mitsubishi motors         850  Car
 2013-01-05    Daihatsu                 1750  Car
 2013-01-05    Sony                     1000  Home electronics
 2013-01-05    Panasonic                 550  Home electronics
 2013-01-05    Sharp                     300  Home electronics
 2013-01-05    Dena                     3000  It
 2013-01-05    Rakuten                   700  It
 2013-01-05    Gungho                  10000  It
 2012-06-01    Toyota                   3000  Car             *グループt(sada_name)20120601
 2012-06-01    Mazda                     100  Car             *グループm(sada_name)20120601
 2012-06-01    Honda                    2500  Car
 2012-06-01    Suzuki                   1600  Car
 2012-06-01    Mitsubishi motors         800  Car
 2012-06-01    Daihatsu                 1300  Car
 2012-06-01    Sony                     1000  Home electronics
 2012-06-01    Panasonic                 550  Home electronics
 2012-06-01    Sharp                     400  Home electronics
 2012-06-01    Dena                     1500  It
 2012-06-01    Rakuten                   800  It
 2012-06-01    Gungho                      0  It


○○社名をグループで縛りし、株価の平均を求める                                  ↓重複の値をグループにする(20130802Toyotaと20130105Toyotaと20120601Toyotaは同じ名前であるのでグループ)
mysql> select sada_name, AVG(sada_price) FROM sadachika_shop.sadachi_marketsjp GROUP BY sada_name DESC;
              ↑カラム名  ↑平均   ↑カラム名   ↑データベース名     ↑テーブル名        ↑カラム名 ↑降順 *ASC昇順 
sada_name     AVG(sada_price)
Toyota             4473.3333(6220+4200+3000)/3=4473.3333
Suzuki             2133.3333(2400+2400+1600)/3=2133.3333
Sony               1333.3333(2000+1000+1000)/3=1333.3333
Sharp               366.6667
Rakuten             933.3333
Panasonic           666.6669
Mitsubishi motors   983.3333
Mazda               226.6667(400+180+100)/3=226.6666                                               
Honda              3208.3333
Gungho            36666.6667(100000+10000+0)/3=36666.6666
Dena               2166.6667
Daihatsu           1750.0000(2200+1750+1300)/3=1750

アルファベット順
1,daihatsu
2,Dena
3,Gungho
4,honda
5,mazda
6,mitsubishi-motors
7,panasonic
8,rakuten 
9,Sharp
10,sony
11,suzuki
12,toyota



* 参考にしたサイトは→ こちら です。

これは赤色の文字例です。

これは青色の文字例です。