*ブログに戻る →ここ です。
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;
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。