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
の後に適用され、グループ化された結果をフィルタリングします。集計関数を使用できます。
これらの句を適切に組み合わせることで、複雑なデータ分析やレポート作成を行うことができます。