MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
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" style="background-color:#fefefe;" |+ T_Salesテーブル |- ! style="background-color:#66CCFF;" | Shop_ID ! style="background-color:#66CCFF;" | Category ! style="background-color:#66CCFF;" | Name ! style="background-color:#66CCFF;" | 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" style="background-color:#fefefe;" |+ T_Salesテーブル |- ! style="background-color:#66CCFF;" | Shop_ID ! style="background-color:#66CCFF;" | Category ! style="background-color:#66CCFF;" | Name ! style="background-color:#66CCFF;" | 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" style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;" | Category ! style="background-color:#66CCFF;" | AVG(Price) |- | Fruit || 250 |- | Vegetable ||150 |} </center> <br> 2. 次に、AVG(Price)のカラムに対して、HAVING句で指定した条件(200より大きい)を満たすレコードが表示される。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;" | Category ! style="background-color:#66CCFF;" | 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> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:SQL_Server]]
SQL Server - GROUP BY
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse