GROUP BY 句 (Microsoft Access SQL)

適用先: Access 2013 | Access 2016

指定したフィールド リストの中で同じ値を持つレコードを結合して 1 つのレコードにします。 SELECT ステートメントで、Sum 関数や Count 関数などの SQL 集計関数を使用すると、各レコードの集計値が得られます。

構文

SELECT フィールドリスト FROM テーブル WHERE criteria [GROUP BY groupfieldlist ]

GROUP BY 句を使用する SELECT ステートメントには、次の指定項目があります。

パーツ 説明
fieldlist 取得する 1 つ以上のフィールドの名前。フィールド名の別名、SQL 集計関数、選択述語 (ALL、DISTINCT、DISTINCTROW、および TOP) などの SELECT ステートメント オプションも指定できます。
table データを取得するテーブルの名前。 詳細については、「FROM 句」を参照してください。
criteria 抽出条件。 ステートメントに WHERE 句が含まれている場合、Microsoft Access データベース エンジンは、WHERE 句の条件に従ってレコードを抽出した後に値をグループ化します。
groupfieldlist レコードのグループ化に使用される最大 10 個のフィールドの名前。 グループフィールド リスト内のフィールド名の順序によって、グループ化レベルが最高レベルから最下位レベルのグループ化レベルに決定されます。

注釈

GROUP BY 句は省略可能です。

SELECT ステートメントで SQL 集計関数を指定していない場合、集計値は算出されません。

GROUP BY 句の中で指定したフィールドに Null 値がある場合、それらの Null 値も省略されずにグループ化されます。 ただし、Null 値は集計関数では評価されません。

WHERE 句を使用して、グループ化したくない行を除外し、 HAVING 句を使用してレコードがグループ化された後でフィルター処理します。

メモまたは OLE オブジェクト のデータが含まれていない限り、SELECT ステートメントに少なくとも 1 つの SQL 集計関数が含まれている場合、フィールドが SELECT ステートメントに含まれていない場合でも、GROUP BY フィールド リストのフィールドは FROM 句にリストされている任意のテーブル内の任意のフィールドを参照できます。 Microsoft® Jet データベース エンジンは、メモ フィールドまたは OLE オブジェクト フィールドでグループ化できません。

SELECT ステートメントのフィールド リストに指定したすべてのフィールドは、GROUP BY 句、または SQL 集計関数の引数のどちらかに指定する必要があります。

次の使用例では、役職名および各役職に該当する社員の数を示す一覧を作成します。 EnumFields プロシージャを呼び出しますが、このプロシージャについては、SELECT ステートメントの使用例を参照してください。

Sub GroupByX1() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' For each title, count the number of employees  
    ' with that title.  
    Set rst = dbs.OpenRecordset("SELECT Title, " _ 
        & "Count([Title]) AS Tally " _ 
        & "FROM Employees GROUP BY Title;") 
     
    ' Populate the Recordset. 
    rst.MoveLast 
     
    ' Call EnumFields to print the contents of the  
    ' Recordset. Pass the Recordset object and desired 
    ' field width. 
    EnumFields rst, 25 
 
    dbs.Close 
 
End Sub 

次の使用例では、各役職について、その役職に該当する社員のうち Washington で勤務している社員の数を計算します。

Sub GroupByX2() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
     
    ' For each title, count the number of employees  
    ' with that title. Only include employees in the  
    ' Washington region. 
    Set rst = dbs.OpenRecordset("SELECT Title, " _ 
        & "Count(Title) AS Tally " _ 
        & "FROM Employees WHERE Region = 'WA' " _ 
        & "GROUP BY Title;") 
     
    ' Populate the Recordset. 
    rst.MoveLast 
 
    ' Call EnumFields to print the contents of the  
    ' Recordset. Pass the Recordset object and desired 
    ' field width. 
    EnumFields rst, 25 
 
    dbs.Close 
 
End Sub 

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。