SQLを使って指定したテーブルのデータのグループ化を行う 内容が重複しているレコードを削除する 書式: 全てのフィールドを選択してグループ化 = 重複レコードの削除 = Distinctと同じ 統計情報を取得する場合にはSQL集計関数を使用する 書式: さらに特定のパターンを持つ特定のレコードの抽出をしたい場合にはHAVING句を使用する 指定のレコードを除外したうえで、Count関数で指定フィールドの件数を出し
【DISTINCT】による重複の削除
記述
SELECT DISTINCT ALL フィールド名 FROM テーブル名
▼DISTINCTのいろいろな記述方法▼
【SQL入門】DISTINCTで重複行をまとめる方法をわかりやすく解説 | 侍エンジニアブログ
【GROUPBY】による重複の削除
留意点
複数のフィールドを指定してグループ化を行う場合には、左に位置するフィールドを優先してグループ化される
集計関数の使用
Count(フィールド名)_引数に指定したフィールドのNull値以外のレコード件数を返す
※「*」を引数に指定するとNull値も含めた件数が返る
Avg(フィールド名)_引数に指定したフィールドの平均値を返す
Sum(フィールド名)_引数に指定したフィールドの合計値を返す
Min(フィールド名)_引数に指定したフィールドの最小値を返す
Max(フィールド名)_引数に指定したフィールドの最大値を返す
記述
統計関数を使わない場合
SELECT フィールド名 FROM テーブル名 GROUPBY フィールド名A ,フィールド名B, ・・・・
統計関数を使う場合
SELECT 集計関数(フィールド名) AS 別フィールド名A, 集計関数(フィールド名) AS 別フィールド名B FROM テーブル名 GROUPBY フィールド名A ,フィールド名B, ・・・・
【HAVING】抽出条件の設定
HAVING句は、グループ化した後のレコードに対して条件を指定し、WHERE句と異なりSQL集計関数を使用することが可能
書式:
SELECT * FROM テーブル名 GROUPBY フィールドA, フィールドB HAVING 集計関数(フィールドB) > 10
【実践】
かつ、結果として出した件数が0ではないものを抽出
▼記述例▼SubSearch_test()
Dim SearchSQL As String
SearchSQL = "SELECT Count(整理番号) As 件数 , 郵便番号 , 都道府県 " & _
"FROM テーブルA " & _
"WHERE 郵便番号 <> '200-0000' " & _
"GROUPBY 郵便番号" & _
"HAVING Count(件数) <> 0 ;"
CurrentDb.QueryDefs("POSTCODEクエリ").SQL = SearchSQL 'クエリ名をセット
DoCmd.OpenQuery"POSTCODEクエリ" '実行
End Sub