Microsoft Access Club >SQL入門講座 >このページ >次頁 < 前項  サイト内検索
 

集計関数を用いた条件を設定する - HAVING句 : SQL入門講座



テーブルレコードの抽出を行いグループ化を行なう際、抽出後にグループ化を行なう場合と、グループ化を行なってから抽出を行なう場合と、2種類の方法があります。今回、ご紹介するHAVING句はグループ化を行った後にレコードデータの抽出を行ないます。なお、このHAVING句の対をなすものはWHERE句です。

HAVING句 構文

HAVING句とは、SQLステートメント内でレコード抽出を行なう際に、集計関数が利用できるSQL構文です。GROUP BY句と共に用いられるケースが多いですが、GROUP BY句を用いないときは、集合関数を使用して選択リストを作成する必要があります。

  • HAVING句 : 検索条件はグループ化後の行に適用されます。
  • WHERE句 : 検索条件はグループ化前の行に適用されます。
サンプルテーブル

サンプルテーブル(社員管理)を下記のように用意します。

売上日 社員名 性別 売上額 職種
2004/01/23 橘 修平 男性 52100 一般職
2004/02/04 柴田 喜一 男性 654100 技能職
2004/02/04 柴田 喜一 男性 7892510 技能職
2004/03/25 正道 良一 男性 4875210 薬剤師
2004/04/30 田中 邦子 女性 785100 一般職
2004/04/30 田中 邦子 女性 4789210 一般職
2004/07/29 草薙 良子 女性 120310 医師
2004/08/10 田中 幸恵 女性 7986620 一般職
2004/09/30 中村 幸三 男性 477123 技能職
構文
HAVING 検索条件
引数 意味 指定
検索条件

フィールド名、比較演算子を組み合わせる

省略不可。

  • 通常は、GROUP BY句を用いるので、GROUP BY フィールド名 HAVING 検索条件 となります。
サンプル構文

「社員管理」テーブルの「売上額」レコードの合計値が6000000以上の社員 を抽出条件として該当レコードを求めます。

  • SELECT Sum(売上額) AS 総売上額,社員名 FROM 社員管理 GROUP BY 社員名 HAVING SUM(売上額) >= 6000000;

これをWHERE句を用いて置き換えようとすると、エラーが発生します。WHERE句では、集計関数を用いることができないからです。

  • SELECT Sum(売上額) AS 総売上額,社員名 FROM 社員管理 WHERE SUM(売上額) >= 6000000 GROUP BY 社員名;

事例 - DAOを用いた事例

DAOを用いて以下のようにSQLを実行します。

Sub MySQLHAVING()

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim mySQL As String
    
    Set db = CurrentDb()
    mySQL = "SELECT Sum(売上額) AS 総売上額,社員名 FROM 社員管理 " _
          & "GROUP BY 社員名 HAVING SUM(売上額) >= 6000000;"
        
    ' Q_売上額を作成します。
    Set qdf = db.CreateQueryDef("Q_売上額", mySQL)
    DoCmd.OpenQuery qdf.Name
    ' Q_売上額を削除します。
    'db.QueryDefs.Delete "Q_売上額"
                
    db.Close: Set db = Nothing
    
End Sub
留意点
  1. VBA内でSQLを用いる場合は、前後をダブルクォーション(")で囲みます。
  2. クエリを削除するには、Deleteメソッドを用いて行ないます。
結果

下記のようにデータが表示されます。

クエリで作成すると・・・

このSQLステートメントをAccessオブジェクトのクエリで作成すると、下記のようになります。

2004/08/29

ページの先頭へ 前ページへ戻る

 


集計関数を用いた条件を設定する - HAVING句 : SQL入門講座


-Microsoft Access Club-

年額2,400円でドメインネームサーバーをご用意します。自宅サーバ構築時にご利用下さい。自宅サーバーは応用範囲が広いです。
年額2,400円でドメインネームサーバー。
自社・自宅サーバ構築時にご利用下さい。
やはり、自前サーバーは応用範囲が広いです。