Menu
Coddy logo textTech

Subqueries Part 2

CoddyのSQLジャーニー「基礎」セクションの一部 — レッスン 39/72。

サブクエリには主に3つのタイプがあります:

  1. スカラーサブクエリ - 単一の値(1行、1列)を返します
  2. 行サブクエリ - 複数の列を持つ単一の行を返します
  3. テーブルサブクエリ - 複数の行と列を返します

たとえば、各サブクエリタイプの使用例をいくつか挙げます:

Scalar Subquery - 平均給与よりも高い給与を得ている従業員を見つける:

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

行サブクエリ - Alice と同じ部署と給与を持つ従業員を見つける

SELECT name
FROM employees
WHERE (department, salary) = (
    SELECT department, salary
    FROM employees
    WHERE name = 'Alice'
);

テーブルサブクエリ - 部署とその従業員数を表示

SELECT department, count
FROM (
    SELECT department, COUNT(*) as count
    FROM employees
    GROUP BY department
) as dept_counts;

使用例に注目してください:

  • Scalar - 単純な比較 (>, <, =)
  • 複数の列を照合する必要がある場合
  • 結果セットからクエリする必要があるとき
challenge icon

チャレンジ

簡単

利用可能なテーブルと列:

  • shop: price, quantity, category, list_date

その総数量がショップ内のすべての数量の平均よりも大きいカテゴリを見つけなさい。

重要: 平均を計算するためにHAVING 句内のサブクエリを使用する必要があります。ハードコードされた値や別々のクエリを使用しないでください — サブクエリは HAVING 内で直接 shop テーブルから AVG(quantity) を計算する必要があります。

解決手順:

  1. まず、ショップ内のすべての数量の平均を計算するサブクエリを書きます:SELECT AVG(quantity) FROM shop
  2. 次に、各カテゴリの数量を合計し、HAVING キーワードを使用してこのサブクエリと比較します

チートシート

サブクエリには3つの主な種類があります:

  1. スカラーサブクエリ - 単一の値(1行、1列)を返します
  2. 行サブクエリ - 複数の列を持つ単一の行を返します
  3. テーブルサブクエリ - 複数の行と列を返します

スカラーサブクエリ - 単純な比較(>, <, =):

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

行サブクエリ - 複数の列を照合:

SELECT name
FROM employees
WHERE (department, salary) = (
    SELECT department, salary
    FROM employees
    WHERE name = 'Alice'
);

テーブルサブクエリ - 結果セットに対するクエリ:

SELECT department, count
FROM (
    SELECT department, COUNT(*) as count
    FROM employees
    GROUP BY department
) as dept_counts;

自分で試してみよう

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン