サブクエリ 2
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 39/72。
サブクエリには、主に3つの種類があります。
- スカラーサブクエリ - 単一の値を返す(1行、1列)
- 行サブクエリ - 複数の列を持つ単一の行を返す
- テーブルサブクエリ - 複数の行と列を返す
たとえば、各サブクエリの種類の使用例を次に示します:
スカラーサブクエリ - 平均給与を超える給与を得ている従業員を検索します:
SELECT name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);行サブクエリ - Alice と同じ department と salary の従業員を検索する
SELECT name
FROM employees
WHERE (department, salary) = (
SELECT department, salary
FROM employees
WHERE name = 'Alice'
);テーブルサブクエリ - department と従業員数を表示
SELECT department, count
FROM (
SELECT department, COUNT(*) as count
FROM employees
GROUP BY department
) as dept_counts;使用例に注目してください:
- スカラー - 単純な比較(>, <, =)
- 複数の列を照合する必要がある場合
- 結果セットからクエリを実行する必要がある場合
チャレンジ
簡単使用可能なテーブルと列:
shop:price、quantity、category、list_date
shop 内のすべての quantity の平均よりも、合計 quantity が大きい category を見つけてください。
重要:平均を計算するために、HAVING句の中でサブクエリを使用する必要があります。ハードコードされた値や別のクエリは使用しないでください。サブクエリは、HAVING の中で直接 shop テーブルから AVG(quantity) を計算する必要があります。
解決手順:
- まず、shop 内のすべての quantity の平均を計算するサブクエリを記述します:
SELECT AVG(quantity) FROM shop - 次に、各 category について quantity の合計を求め、
HAVINGキーワードを使用してこのサブクエリと比較します
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド