SQLでは、データの検索や集計を行う際に、様々な条件式や句を組み合わせて柔軟なクエリを作成できます。
条件式
CASE 式
CASE 式は、SQLにおける条件分岐の機能を提供します。プログラミング言語の if-else if-else 文や switch 文に似ています。SELECT 句や WHERE 句、ORDER BY 句など、様々な場所で使用できます。
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
-- ... 任意の数のWHEN-THEN句
ELSE 結果N -- どの条件にも合致しない場合のデフォルト値 (省略可能)
END
例:
SELECT
product_name,
price,
CASE
WHEN price >= 1000 THEN '高価格帯'
WHEN price >= 500 THEN '中価格帯'
ELSE '低価格帯'
END AS price_category
FROM
products;
集計とグループ化
GROUP BY 句
GROUP BY 句は、指定した列の値に基づいて行をグループ化し、各グループに対して集計関数(COUNT, SUM, AVG, MAX, MIN など)を適用するために使用します。
SELECT 列リスト, 集計関数(列名)
FROM 表名
GROUP BY グループ化対象列;
例:
SELECT
category,
COUNT(*) AS total_products,
AVG(price) AS average_price
FROM
products
GROUP BY
category;
このクエリは、products テーブルを category 列でグループ化し、各カテゴリの製品数と平均価格を計算します。
HAVING 句
HAVING 句は、GROUP BY 句でグループ化された結果に対して、さらに条件を適用してフィルタリングを行うために使用します。WHERE 句が個々の行をフィルタリングするのに対し、HAVING 句はグループ全体をフィルタリングします。
SELECT 列リスト, 集計関数(列名)
FROM 表名
GROUP BY グループ化対象列
HAVING グループに対する条件式;
例:
SELECT
category,
COUNT(*) AS total_products,
AVG(price) AS average_price
FROM
products
GROUP BY
category
HAVING
COUNT(*) >= 5; -- 製品数が5つ以上のカテゴリのみを抽出
このクエリは、カテゴリごとの製品数と平均価格を計算し、その中で製品数が5つ以上のカテゴリのみを表示します。
WHERE と HAVING の違い
WHERE句:GROUP BYの前に適用され、個々の行をフィルタリングします。集計関数は使用できません。HAVING句:GROUP BYの後に適用され、グループ化された結果をフィルタリングします。集計関数を使用できます。
これらの句を適切に組み合わせることで、複雑なデータ分析やレポート作成を行うことができます。