Menu
Coddy logo textTech

Подзапросы. Часть 2

Часть раздела Основы путешествия по SQL на Coddy — урок 39 из 72.

Существует три основных типа подзапросов:

  1. Скалярные подзапросы — возвращают одно значение (одна строка, один столбец)
  2. Построчные подзапросы — возвращают одну строку с несколькими столбцами
  3. Табличные подзапросы — возвращают несколько строк и столбцов

Например, вот несколько примеров использования для каждого типа подзапроса:

Скалярный подзапрос — найти сотрудников, которые зарабатывают больше средней зарплаты:

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

Строчный подзапрос — найти сотрудника(ов) с таким же department и salary, как у Alice

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

Подзапросы в секции FROM — вывод отделов и количества их сотрудников

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

Обратите внимание на варианты использования:

  • Скалярные — простые сравнения (>, <, =)
  • Когда нужно сопоставить несколько столбцов
  • Когда вам нужно выполнить запрос из результирующего набора
challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • shop: price, quantity, category, list_date

Найдите категории, у которых общее количество больше среднего значения всех количества (quantity) в магазине.

Важно: Вы должны использовать подзапрос внутри предложения HAVING для вычисления среднего значения. Не используйте жестко заданное значение или отдельный запрос — подзапрос должен вычислять AVG(quantity) из таблицы shop непосредственно внутри HAVING.

Шаги для решения:

  1. Сначала напишите подзапрос, который вычисляет среднее значение всех quantity в магазине: SELECT AVG(quantity) FROM shop
  2. Затем для каждой category просуммируйте их quantity и сравните с этим подзапросом, используя ключевое слово HAVING

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы