MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
SQL Server - GROUP BYのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
SQL Server - GROUP BY
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == 複数の行を各グループに集約する (GROUP BY) == 下表に示すテーブルがある。<br> <center> {| class="wikitable" |+ T_Salesテーブル |- ! Shop_ID !! Category !! Name !! Price |- | 1 || Fruit || Apple || 300 |- | 1 || Fruit || Orange || 200 |- | 1 || Vegetable || Carrot || 200 |- | 2 || Vegetable || Eggplant || 100 |} </center> <br> 以下に、<code>GROUP BY</code>句のシンタックスを示す。<br> <br> <code>GROUP BY</code>句で指定したカラム名で、複数の行を集約する。<br> <code>SELECT</code>句のカラム名と<code>GROUP BY</code>句のカラム名は一致している必要はない。<br> <syntaxhighlight lang="sql"> SELECT <カラム名> FROM <テーブル名> GROUP BY <カラム名> </syntaxhighlight> <br> 以下の例では、上記のT_Salesテーブルに対して、<code>GROUP BY</code>句を使用してデータを抽出している。<br> <syntaxhighlight lang="sql"> SELECT Category, AVG(Price) FROM T_Sales GROUP BY Category; </syntaxhighlight> <br> 結果は、以下の通りである。<br> <br> <code>GROUP BY</code>句で指定したCategoryカラムの値で集約されたレコードが表示される。<br> また、各レコードごとに集約関数の値が表示される。<br> Category AVG(Price) Fruit 250 Vegetable 150 <br> 以下の例では、<code>GROUP BY</code>句にShop_IDカラムとCategoryカラムを追加する時、Shop_IDカラムとCategoryカラムでレコードが集約されている。<br> <syntaxhighlight lang="sql"> SELECT Shop_ID, Category, AVG(Price) FROM T_Sales GROUP BY Shop_ID, Category ORDER BY Shop_ID, Category; </syntaxhighlight> <br> Shop_ID Category AVG(Price) 1 Fruit 250 1 Vegetable 200 2 Vegetable 100 <br><br> == 集約関数の値に条件を指定する (HAVING句) == ==== HAVING句の使用 ==== 下表に示すテーブルがある。<br> <center> {| class="wikitable" |+ T_Salesテーブル |- ! Shop_ID !! Category !! Name !! Price |- | 1 || Fruit || Apple || 300 |- | 1 || Fruit || Orange || 200 |- | 1 || Vegetable || Carrot || 200 |- | 2 || Vegetable || Eggplant || 100 |} </center> <br> 以下に、<code>HAVING</code>句のシンタックスを示す。<br> <br> <code>HAVING</code>句を使用すると、複数のレコードを各グループに集約して、集約関数の値に条件を指定できる。<br> <syntaxhighlight lang="sql"> SELECT <カラム名> FROM <テーブル名> GROUP BY <カラム名> HAVING <条件> </syntaxhighlight> <br> 以下の例では、上記のT_Salesテーブルに対して、<code>HAVING</code>句を使用してデータを抽出している。<br> <syntaxhighlight lang="sql"> SELECT Category, AVG(Price) FROM T_sales GROUP BY Category HAVING AVG(Price) > 200; </syntaxhighlight> <br> 以下に、上記のSQL文の処理のイメージを示す。<br> 1. まず、<code>GROUP BY</code>句で指定したCategoryカラムの単位で集約する。<br> <center> {| class="wikitable" |+ Caption text |- ! Category !! AVG(Price) |- | Fruit || 250 |- | Vegetable ||150 |} </center> <br> 2. 次に、AVG(Price)のカラムに対して、HAVING句で指定した条件(200より大きい)を満たすレコードが表示される。<br> <center> {| class="wikitable" |+ Caption text |- ! Category !! AVG(Price) |- | Fruit || 250 |} </center> <br> ==== WHERE句が使用できない場合 ==== 以下のように、<code>WHERE</code>句で、集約関数(AVG)の結果を条件にすることはできない。<br> <br> MySQLでは、以下のメッセージが表示される。<br> #1111 - 集計関数の使用方法が不正です。 <br> 集約関数の結果を条件にする場合は、<code>HAVING</code>句を使用する。<br> <syntaxhighlight lang="sql"> SELECT Category, AVG(Price) FROM T_Sales WHERE AVG(Price) > 200 GROUP BY Category; </syntaxhighlight> <br> ==== WHERE句が使用できるパターン ==== ただし、集約関数の結果以外を条件にする場合は、<code>GROUP BY</code>句と<code>WHERE</code>句が使用できる。<br> <br> この場合、レコード件数を絞る<code>WHERE</code>句を使用した方がよい。<br> <code>HAVING</code>句では処理が遅くなる可能性がある。<br> <syntaxhighlight lang="sql"> SELECT Category, AVG(Price) FROM T_Sales WHERE Name = 'Apple' GROUP BY Category; </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:SQL_Server]]
SQL Server - GROUP BY
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse