データベースの用語一覧へ
このページの目次
データベース中級図解あり

集約とは?

最終更新:2026/08/18

3秒でわかる

集約とは、ばらばらの複数データをまとめること。ITでは主に、多数の値から合計・平均・件数など少数の結果を作る処理を指し、UMLでは別の意味を持ちます。

30秒図解

商品IDが1、2、1の注文3行を商品ごとに分けて金額を足すと、商品1と2の合計金額を示す2行へ集約される
3行の注文を商品IDで分け、金額を足すと商品ごとの2行になります。集約は、多数の行から判断に使う少数の結果を作る処理です。

もう少し詳しく

まず「集約」の意味を分ける

「集約」は、使われる文脈によって指すものが変わります。

文脈意味
一般的な日本語ばらばらのものを一か所へまとめる情報を一つの資料へ集約する
データ処理複数の行や値から、少数の結果を作る売上の合計、平均、件数を出す
UML・オブジェクト設計全体と部分の「持っている」関係を表すチームが選手を持つ


プログラミングやSQLの説明で単に「集約する」と書かれていたら、多くの場合はデータ処理の集約です。このページもデータ処理を中心に説明し、後半でUMLの集約との違いを整理します。

データ処理の集約とは

データ処理の集約(aggregation)とは、複数の行や要素をまとめて、判断しやすい少数の結果へ変換する操作です。10件の売上から合計を1個作る、100人分の点数から平均を1個作る、といった「多から少へ」の変換が集約です。

SQLでは SUMAVGCOUNTMAXMIN などの集約関数を使います。Pythonなら sum()max()JavaScriptなら reduce() が同じ役割を担います。

GROUP BY を使わない集約は、表全体から結果を1行作ります。GROUP BY product_id のようにグループを作る場合は、商品ごとに1行を返します。「必ず1件にする」のではなく、「全体またはグループごとに1件へまとめる」と捉えると正確です。

なぜ集約が必要なのか

生のデータは行数が多すぎて、そのままでは判断に使えません。1年分の注文明細が12万行あっても、知りたいのは「今月の売上はいくらか」「一番売れた商品は何か」といった数個の答えです。集約は、データを意味のある大きさまで縮める工程です。

集約する場所も性能に影響します。12万行をアプリへ取り出してから合計するより、データベース側で SUM を計算し、結果の1行だけを受け取るほうが転送量とメモリ使用量を抑えられます。

SQLでの具体例

商品ごとの注文数、合計金額、平均金額を求めます。

SELECT product_id, COUNT(*) AS order_count, SUM(amount) AS total_amount, ROUND(AVG(amount)) AS avg_amount FROM orders WHERE ordered_at >= '2026-01-01' GROUP BY product_id HAVING SUM(amount) >= 10000 ORDER BY total_amount DESC;

処理の順番は次のとおりです。

  • WHERE で集約前の注文明細を絞る

  • GROUP BY で商品ごとのかたまりを作る

  • COUNTSUMAVG で各かたまりを1行へまとめる

  • HAVING で集約後の結果を絞る
  • プログラムでの具体例

    同じ商品ごとの合計をPythonで作ると、値を順番に足して商品ごとの1個の結果へまとめる処理になります。

    from collections import defaultdict orders = [ {"product_id": 1, "amount": 3000}, {"product_id": 2, "amount": 8000}, {"product_id": 1, "amount": 5000}, ] totals = defaultdict(int) for order in orders: totals[order["product_id"]] += order["amount"] print(dict(totals)) # {1: 8000, 2: 8000}

    JavaScriptの reduce() も、配列の要素を1個ずつ累積値へ畳み込む集約です。空配列にも対応できるよう、items.reduce((total, n) => total + n, 0) のように初期値を書くのが安全です。

    UML・Javaでいう集約

    UMLの集約は、数値を合計する処理ではありません。クラス同士の全体と部分の関係を表す関連の一種で、全体側に白いひし形を書きます。たとえば「チームが選手を持つ」関係では、チームがなくなっても選手は独立して存在できます。

    Javaでは集約専用のキーワードはありません。あるオブジェクトが別のオブジェクトへの参照をフィールドに持つことで表します。部分の寿命を全体が強く所有する「コンポジション」は黒いひし形で表し、集約より強い関係です。

    つまずきやすいところ

  • GROUP BY にない列を SELECT に並べる。束ねた行のどの値を出すか決められないため、エラーになります

  • COUNT(*)COUNT(column) を同じだと思う。後者はその列が NULL の行を数えません

  • WHEREHAVING を逆にする。集約前の行に対する条件は WHERE、集約後の結果に対する条件は HAVING です

  • 集約と単なる並べ替えを混同する。ソートは行数を変えず、順番だけを変えます
  • 似た操作との違い

    操作入力と出力代表例
    集約n件から、全体またはグループごとに1件SUMAVGreduce
    変換n件からn件税抜価格を税込価格へ変える
    絞り込みn件からn件以下1000円以上だけ残す
    ソートn件からn件金額の降順に並べる


    よくある質問

    集約と集計は何が違いますか

    集計は、合計・平均・件数などを計算する行為を指すことが多い言葉です。集約は「複数をまとめる」というより広い概念で、その手段として集計を行います。データ処理の会話では、ほぼ同じ意味で使われることもあります。

    aggregationは日本語で何と訳しますか

    一般には「集約」または「集計」と訳します。UMLでは「集約」、SQLや分析では文脈に応じて「集約」「集計」の両方が使われます。

    Javaで「集約」と書かれていたら何を指しますか

    Stream.reduce() などのデータ処理を指す場合と、クラス同士のhas-a関係を指す場合があります。周囲にコレクションや合計の話があれば前者、クラス図やオブジェクトの寿命の話があれば後者です。

    覚え方

    データ処理なら「多くの行を、答えとして読める少数の行へまとめる」。UMLなら「全体が部分を持つ」。まず文脈を分けると迷いません。

    知識のつながり

    サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

    現在地集約DB

    LEARN BY DOING

    この用語を、教材で使ってみる

    直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

    この用語を扱うコース

    コース

    SQL入門:データベース操作のきほん

    71レッスン
    コース

    Python入門:基礎文法編

    74レッスン
    コース

    データ分析入門 Python(pandas)

    57レッスン
    SQL・データベースコースの全編を見る