Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: sql, having, join

Что такое группировка, фильтрация, JOIN-ы?

Этот вопрос проверяет знание ключевых операций SQL для агрегации данных, их фильтрации и объединения связанной информации из нескольких таблиц.

Короткий ответ

GROUP BY (группировка) используется для объединения строк с одинаковыми значениями в сводные строки, часто вместе с агрегирующими функциями (COUNT, SUM). Фильтрация (WHERE и HAVING) позволяет выбирать только нужные строки: WHERE фильтрует строки до группировки, а HAVING — после. JOIN (соединение) позволяет объединять данные из двух или более таблиц на основе связи между ними.

Длинный ответ

Это три фундаментальных кита для построения полезных SQL-запросов.

GROUP BY (Группировка)

  • Назначение: Агрегировать данные, то есть объединять несколько строк в одну по заданному критерию, вычисляя для каждой группы какое-то общее значение.

  • Как работает: Оператор GROUP BY группирует строки, имеющие одинаковые значения в указанных столбцах. После этого можно применить агрегирующие функции.

  • Агрегирующие функции: COUNT(), SUM(), AVG(), MAX(), MIN().

  • Пример: Посчитать количество заказов у каждого клиента.

    SELECT customer_id, COUNT(*) as order_count
    FROM orders
    GROUP BY customer_id;

Фильтрация: WHERE vs HAVING

  • WHERE

    • Применяется: К отдельным строкам до того, как они будут сгруппированы.

    • Не может использоваться с агрегирующими функциями.

    • Пример: Найти клиентов из Москвы и посчитать их заказы.

      SELECT customer_id, COUNT(*) as order_count
      FROM orders
      WHERE city = 'Москва'  -- Фильтрация ДО группировки
      GROUP BY customer_id;
  • HAVING

    • Применяется: К группам строк после того, как группировка была выполнена.

    • Может использоваться с агрегирующими функциями.

    • Пример: Найти клиентов, у которых больше 5 заказов.

      sql

      SELECT customer_id, COUNT(*) as order_count
      FROM orders
      GROUP BY customer_id
      HAVING COUNT(*) > 5;  -- Фильтрация ПОСЛЕ группировки

JOIN (Соединения)

  • Назначение: Объединять данные из нескольких таблиц на основе связи между столбцами.

  • Основные типы:

    1. INNER JOIN: Возвращает только те строки, для которых есть совпадение в обеих таблицах.

      SELECT users.name, orders.amount
      FROM users
      INNER JOIN orders ON users.id = orders.user_id;
    2. LEFT (OUTER) JOIN: Возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадения нет, в правой части будет NULL.

      SELECT users.name, orders.amount
      FROM users
      LEFT JOIN orders ON users.id = orders.user_id;
      -- Покажет всех пользователей, даже тех, у кого нет заказов
    3. RIGHT JOIN и FULL JOIN: Аналогичны LEFT, но возвращают все строки из правой или из обеих таблиц соответственно (используются реже).

Вывод:

  • Используйте GROUP BY для получения сводных данных и агрегатов.

  • Используйте WHERE для фильтрации исходных данных, а HAVING — для фильтрации результатов агрегации.

  • Используйте JOIN для объединения связанных данных из разных таблиц, выбирая тип соединения (INNER, LEFT) в зависимости от того, хотите ли вы видеть только совпадения или все записи из одной таблицы.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

Ключевые слова

#sql

#having

#join

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.