SQLで同じ値をまとめるDISTINCTとGROUP BYの使い方と実践例

SQLで重複データを整理する方法について、DISTINCTとGROUP BYの違いから実践的なコード例まで詳しく解説します。あなたのデータ分析スキルを向上させませんか?

SQLで同じ値をまとめる方法と実践例

SQLデータ集約の基本
📊
重複データの整理

DISTINCTとGROUP BYを使用して、重複データを効率的に整理できます

🔍
データの集計

集計関数を活用して、様々な統計情報を取得可能です

パフォーマンス最適化

適切な方法を選択することで、クエリの実行効率が向上します

SQLで同じ値をまとめるDISTINCTの基本使用法

DISTINCTは、重複するレコードを1つにまとめる最もシンプルな方法です。以下のような社員テーブルがあるとします:


CREATE TABLE employees (
    id INT,
    name VARCHAR(50),
    department VARCHAR(50)
)

 

単一カラムの重複を除外する場合:


SELECT DISTINCT department FROM employees

 

複数カラムの重複を除外する場合:


SELECT DISTINCT name, department FROM employees

SQLで同じ値をまとめるGROUP BYの活用方法

GROUP BYは、データをグループ化して集計処理を行う際に使用します。以下のような売上テーブルを例に説明します:


CREATE TABLE sales (
    product_id INT,
    category VARCHAR(50),
    amount INT,
    sale_date DATE
)

 

カテゴリごとの売上合計を算出する場合:


SELECT 
    category,
    SUM(amount) as total_sales,
    COUNT(*) as transaction_count
FROM sales
GROUP BY category

SQLで同じ値をまとめる際の集計関数の使い方

集計関数を使用することで、グループ化したデータから様々な統計情報を取得できます:

  • COUNT(): レコード数をカウント
  • SUM(): 合計値を計算
  • AVG(): 平均値を計算
  • MAX(): 最大値を取得
  • MIN(): 最小値を取得

 

例えば、部門ごとの平均給与を算出する場合:


SELECT 
    department,
    ROUND(AVG(salary), 2) as avg_salary,
    MAX(salary) as max_salary,
    MIN(salary) as min_salary
FROM employees
GROUP BY department

SQLで同じ値をまとめる際のHAVING句の活用

HAVING句を使用することで、グループ化した結果に対して条件を設定できます。例えば、平均売上が10万円を超える商品カテゴリのみを抽出する場合:


SELECT 
    category,
    AVG(amount) as avg_sales
FROM sales
GROUP BY category
HAVING avg_sales > 100000

SQLで同じ値をまとめる際のパフォーマンス最適化

DISTINCTとGROUP BYは、使用目的によって使い分けることが重要です:

機能 DISTINCT GROUP BY
重複除外
集計処理 ×
実行速度 単純な場合に高速 集計時に有利

 

パフォーマンスを最適化するためのポイント:

  • インデックスの活用
  • 適切な WHERE 句の配置
  • 必要最小限のカラム指定

-- 効率的なクエリの例
SELECT 
    category,
    COUNT(*) as count
FROM sales
WHERE sale_date >= '2024-01-01'
GROUP BY category
HAVING count > 100