Достаем кол-во совпадений в SQL: считаем 'Business' в столбце

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для подсчета элементов по категориям в SQL можно применить подзапрос, соединенный с основной таблицей. Возьмем за пример подсчет количества заказов для каждого клиента. Следующий запрос поможет в этом:

SQL
Скопировать код
SELECT 
  c.name, 
  COALESCE(o.order_count, 0) AS order_count
FROM 
  customers c
LEFT JOIN (
  SELECT 
    customer_id, 
    COUNT(*) AS order_count
  FROM 
    orders
  GROUP BY 
    customer_id
) o ON c.id = o.customer_id;

Данный подход позволяет сочетать подзапрос с функцией группировки и основной запрос с помощью LEFT JOIN. Это включает в результаты запроса всех клиентов, включая тех, у кого нет заказов.

Общее количество элементов можно вычислить, отказавшись от GROUP BY, и воспользовавшись оконной функцией.

SQL
Скопировать код
SELECT
  customer_id,
  COUNT(*) OVER() AS total_orders
FROM orders
WHERE columnName = 'Business';
Кинга Идем в IT: пошаговый план для смены профессии

Продвинутые сценарии и производительность

Подсчёт: проще простого

Если вам нужно просто подсчитать объекты, упростите задачу и избавьтесь от подзапросов:

SQL
Скопировать код
SELECT 
  columnName,
  COUNT(*) AS row_count
FROM 
  eventsTable 
WHERE 
  columnName = 'Business';

Это примерно равносильно тому, чтобы спросить в комнате, кто любит пиццу. Ответы следуют сразу.

Производительность: долгосрочный план

При работе с большими объёмами данных или сложными запросами время исполнения подзапросов играет важную роль. Правильное индексирование столбцов и понимание принципов работы SQL оптимизатора может значительно ускорить выполнение запросов. Помимо этого стоит рассмотреть использование временных таблиц или общих табличных выражений (CTE) на больших объемах данных.

Визуализация

Визуализируем работу SQL-подзапросов с COUNT. Представьте, что вы выделяете определённые слова в тексте:

Markdown
Скопировать код
Текст книги: [Слово1, Слово2, Слово3, Слово2, Слово3, Слово3]

Вашей задачей является подсчет того, сколько раз встречается Слово3:

SQL
Скопировать код
SELECT COUNT(Word) FROM (SELECT Word FROM книга WHERE Word = 'Word3') AS Subquery;
Markdown
Скопировать код
Число вхождений (Слово3):
До: [Слово1, Слово2, Слово3, Слово2, Слово3, Слово3]
После:  💡💡💡
COUNT:  3

Это похоже на игру в бинго. Каждый 💡 — это один подсчет 'Слово3' в подзапросе.

Детализированные подсчёты: каждая деталь важна

Возможно, захочется узнать подробнее и подсчитать каждую деталь. Вот как это можно сделать:

SQL
Скопировать код
SELECT
  Category,
  (SELECT COUNT(*) FROM Products WHERE Products.Category = CategoryList.Category) AS ProductCount
FROM 
  (SELECT DISTINCT Category FROM Products) AS CategoryList;

Это похоже на подсчет баллов по категориям в игре.

Работа в команде 🤝: подзапросы и JOIN

Если вам требуется подсчитать связанные строки из разных таблиц, комбинация INNER JOIN и подзапросов для агрегации будет идеальным решением:

SQL
Скопировать код
SELECT 
  p.product_name, 
  c.category_name, 
  sc.subcategory_count
FROM 
  products p
INNER JOIN categories c ON p.category_id = c.category_id
INNER JOIN (
  SELECT 
    category_id, 
    COUNT(*) as subcategory_count
  FROM 
    subcategories
  GROUP BY 
    category_id
) sc ON c.category_id = sc.category_id;

Это одно из способов распределить обязанности между соседями по комнате.

Война инструментов: подзапрос против оконной функции

При выборе инструмента, будьте мудры: используйте подзапросы для изолирования логики подсчёта и оконные функции для упрощения синтаксиса и наращивания производительности при работе с данными.

Group By: неоценимый помощник в поисках

GROUP BY позволяет группировать данные по определённым критериям. Это словно детектив, собирающий улики. Очень полезный механизм для детализации категорий.

Полезные материалы

  1. Всё о функциях COUNT, AVG, SUM — Да, пожалуйста 😄
  2. Подзапросы — они не так сложны, как кажутся 😍
  3. Когда Stack Overflow не может справиться со шрифтом — подсчеты не единственная сложность
  4. Связанные подзапросы и погружение в глубины SQL — в подзапросах есть свой шарм!