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