*ブログに戻る →ここ です。
GROUP BY句の出した値にさらに条件をつける場合に用いるのがHAVING句である。
HAVING句を使って平均値が2000以上の値だけを取得する free94
Saturday,August,3,2013
あらかに作成しておいたテーブルを使う(前回のfree92を用いる)。
○テーブルの中身の表示
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
○GROUP BY区のメモ *DESC降順 *ASC昇順
↓カラム名 ↓平均 ↓カラム名 ↓データベース名 ↓テーブル名 ↓グループ作る↓カラム名 *順番の指定が無い場合はASC昇順となる
mysql> select sada_name, AVG(sada_price) FROM sadachika_shop.sadachi_marketsjp GROUP BY sada_name;
sada_name AVG(sada_price)
Daihatsu 1750.0000
Dena 2166.6667 *該当箇所2000以上
Gungho 36666.6667 *該当箇所2000以上
Honda 3208.3333 *該当箇所2000以上
Mazda 226.6667
Mitsubishi motors 983.3333
Panasonic 666.6669
Rakuten 933.3333
Sharp 366.6667
Sony 1333.3333
Suzuki 2133.3333 *該当箇所2000以上
Toyota 4473.3333 *該当箇所2000以上
アルファベット順
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
○昇順 GROUP BY区のメモ *DESC降順 *ASC昇順
mysql> select sada_name, AVG(sada_price) FROM sadachika_shop.sadachi_marketsjp GROUP BY sada_name ASC;
↑ASC昇順
○降順
mysql> select sada_name, AVG(sada_price) FROM sadachika_shop.sadachi_marketsjp GROUP BY sada_name DESC;
↑DESC昇順
○○HAVING句を使って平均値が2000以上の値だけを取得する
↓カラム名↓平均↓カラム名 ↓データベース ↓テーブル名
mysql> select sada_name, AVG(sada_price) FROM sadachika_shop.sadachi_marketsjp
-> GROUP BY sada_name ASC HAVING AVG(sada_price) > 2000;
↑グループを選ぶ ↑昇順 ↑条件を指定2000より大きい
sada_name AVG(sada_price)
Dena 2166.6667 *該当箇所2000以上(2000+3000+1500)/3=2166.6666
Gungho 36666.6667 *該当箇所2000以上
Honda 3208.3333 *該当箇所2000以上
Suzuki 2133.3333 *該当箇所2000以上
Toyota 4473.3333 *該当箇所2000以上
○○いろいろ条件を付けて表示させる。自分的にはけっこう難易度は高度です。
○○テーブルの値を表示させる。
mysql> select sada_name, AVG(sada_price), sada_category FROM sadachika_shop.sadachi_marketsjp
-> GROUP BY sada_name ASC; *ASC昇順
sada_name AVG(sada_price) sada_category
Daihatsu 1750.0000 Car
Dena 2166.6667 It
Gungho 36666.6667 It
Honda 3208.3333 Car
Mazda 226.6667 Car
Mitsubishi motors 983.3333 Car
Panasonic 666.6669 Home electronics
Rakuten 933.3333 It
Sharp 366.6667 Home electronics
Sony 1333.3333 Home electronics
Suzuki 2133.3333 Car
Toyota 4473.3333 Car
○条件No1 *DESC降順 *ASC昇順
mysql> select sada_name, AVG(sada_price), sada_category FROM sadachika_shop.sadachi_marketsjp
-> WHERE sada_category IN('Car', 'Home electronics','It')
-> GROUP BY sada_name ASC *ASC昇順
-> HAVING AVG(sada_price) BETWEEN 200 AND 1000 *HAVING句はWHERE句と異なりGROUP BY句のデータに対し *BETWEEN min から maxまで表示させる
↑*HAVING句はWHERE句と異なりGROUP BY句によってグループ化が行われたデータに対して条件を指定して絞り込む
-> ORDER BY AVG(sada_price) DESC LIMIT 12;
↑降順 ↑大きい方から下り
sada_name AVG(sada_price) sada_category
Mitsubishi motors 983.3333 Car
Rakuten 933.3333 It
Panasonic 666.6669 Home electronics
Sharp 366.6667 Home electronics
Mazda 226.6667 Car
○条件No2 *DESC降順 *ASC昇順
mysql> select sada_name, AVG(sada_price), sada_category FROM sadachika_shop.sadachi_marketsjp
-> WHERE sada_category IN('Home electronics','It')
-> GROUP BY sada_name ASC *ASC昇順
-> HAVING AVG(sada_price) BETWEEN 200 AND 4000 *HAVING句はWHERE句と異なりGROUP BY句のデータに対し *BETWEEN min から maxまで表示させる
↑*HAVING句はWHERE句と異なりGROUP BY句によってグループ化が行われたデータに対して条件を指定して絞り込む
-> ORDER BY AVG(sada_price) DESC LIMIT 12;
↑降順 ↑大きい方から下り
sada_name AVG(sada_price) sada_category
Dena 2166.6667 It
Sony 1333.3333 Home electronics
Rakuten 933.3333 It
Panasonic 666.6669 Home electronics
Sharp 366.6667 Home electronics
○条件No3 *DESC降順 *ASC昇順
mysql> select sada_name, AVG(sada_price), sada_category FROM sadachika_shop.sadachi_marketsjp
-> WHERE sada_category IN('Home electronics','It')
-> GROUP BY sada_name ASC *ASC昇順
-> HAVING AVG(sada_price) BETWEEN 200 AND 4000 *HAVING句はWHERE句と異なりGROUP BY句のデータに対し *BETWEEN min から maxまで表示させる
↑*HAVING句はWHERE句と異なりGROUP BY句によってグループ化が行われたデータに対して条件を指定して絞り込む
-> ORDER BY AVG(sada_price) DESC LIMIT 3;
↑降順 ↑大きい方から下り
sada_name AVG(sada_price) sada_category
Dena 2166.6667 It
Sony 1333.3333 Home electronics
Rakuten 933.3333 It
○条件No4 *DESC降順 *ASC昇順
mysql> select sada_name, AVG(sada_price), sada_category FROM sadachika_shop.sadachi_marketsjp
-> WHERE sada_category IN('Home electronics','It')
-> GROUP BY sada_name ASC *ASC昇順
-> HAVING AVG(sada_price) BETWEEN 200 AND 4000 *HAVING句はWHERE句と異なりGROUP BY句のデータに対し *BETWEEN min から maxまで表示させる
↑*HAVING句はWHERE句と異なりGROUP BY句によってグループ化が行われたデータに対して条件を指定して絞り込む
-> ORDER BY AVG(sada_price) ASC LIMIT 3;
↑昇順 ↑小さい方から
sada_name AVG(sada_price) sada_category
Sharp 366.6667 Home electronics
Panasonic 666.6669 Home electronics
Rakuten 933.3333 It
○○○この数字の順番に記入しないとエラーとなる
1SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ...
[FROM table_references
[WHERE where_condition] *位置指定だよね
2 [GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]] *ASCを指定した場合は昇順, DESCを指定した場合は降順;
3 [HAVING where_condition]
4 [ORDER BY {col_name | expr | position}
5 [ASC | DESC], ...] *ASCを指定した場合は昇順, DESCを指定した場合は降順;
6 [LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name'
| INTO @var_name [, @var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
○WHERE句メモ
mysql> select * FROM sadachika_copy.sadachi_copyproducts WHERE
sada_copyid >= 2 and sada_copyid <=12
and sada_category IN('食べ物', '飲み物') *IN 該当する項目を表示させる
*以外のパターン and sada_category NOT IN('食べ物', '飲み物') *NOT IN 以外を表示させる
and sada_price BETWEEN 70 and 220 *BETWEEN min から maxまで表示させる
and sada_releasedate BETWEEN 20120601 and 20130101;
○WHERE句メモ
○「sada_id」カラムの値が'5< X <9'のデータだけを取得します。
mysql> select * from sadachika_shop.sadachi_products where sada_id >= 6 and sada_id <= 8;
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。