SQLでの0埋め(ゼロパディング)について詳しく解説します。基本的な方法から応用テクニック、各データベースでの違いまで幅広くカバー。あなたのSQLスキルを次のレベルに引き上げる秘訣とは?
SQLで同じ値をまとめるDISTINCTとGROUP BYの使い方と実践例
SQLで重複データを整理する方法について、DISTINCTとGROUP BYの違いから実践的なコード例まで詳しく解説します。あなたのデータ分析スキルを向上させませんか?
DISTINCTは、重複するレコードを1つにまとめる最もシンプルな方法です。以下のような社員テーブルがあるとします:
CREATE TABLE employees (
id INT,
name VARCHAR(50),
department VARCHAR(50)
)
単一カラムの重複を除外する場合:
SELECT DISTINCT department FROM employees
複数カラムの重複を除外する場合:
SELECT DISTINCT name, department FROM employees
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
集計関数を使用することで、グループ化したデータから様々な統計情報を取得できます:
例えば、部門ごとの平均給与を算出する場合:
SELECT
department,
ROUND(AVG(salary), 2) as avg_salary,
MAX(salary) as max_salary,
MIN(salary) as min_salary
FROM employees
GROUP BY department
HAVING句を使用することで、グループ化した結果に対して条件を設定できます。例えば、平均売上が10万円を超える商品カテゴリのみを抽出する場合:
SELECT
category,
AVG(amount) as avg_sales
FROM sales
GROUP BY category
HAVING avg_sales > 100000
DISTINCTとGROUP BYは、使用目的によって使い分けることが重要です:
機能 | DISTINCT | GROUP BY |
---|---|---|
重複除外 | ○ | ○ |
集計処理 | × | ○ |
実行速度 | 単純な場合に高速 | 集計時に有利 |
パフォーマンスを最適化するためのポイント:
-- 効率的なクエリの例
SELECT
category,
COUNT(*) as count
FROM sales
WHERE sale_date >= '2024-01-01'
GROUP BY category
HAVING count > 100