Выборка и группировка в SQL: сумма колонки, неуникальные имена

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

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

Для выборки из таблицы сразу нескольких столбцов и группировки по одному из них используются агрегатные функции, вроде SUM() или MAX(). Рассмотрим таблицу sales, в которой присутствуют поля salesperson и sales_amount:

SQL
Скопировать код
SELECT salesperson, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY salesperson;

Здесь столбец salesperson выступает ключом для группировки и объединения отдельных продаж. В SELECT-запросе каждый столбец, не участвующий в группировке, должен быть включен с помощью агрегатной функции для корректности SQL-запроса.

Пошаговый план для смены профессии

Если неуникальные столбцы ставят в тупик 🤯

Неуникальные столбцы могут усложнить интерпретацию результатов. В этом случае функция MAX() может оказаться крайне полезной:

SQL
Скопировать код
SELECT ProductID, MAX(ProductName) AS ProductName, SUM(OrderQuantity) AS TotalOrdered
FROM Products
GROUP BY ProductID;

Использование MAX() позволяет включить в результаты выборки не сгруппированный столбец, например ProductName, по ProductID.

Работа со сложными конструкциями: CTE и подзапросы

Для удовлетворения сложных требований в группировке часто используют Common Table Expressions (CTE) и подзапросы:

SQL
Скопировать код
WITH GroupedData AS (
  SELECT ProductID, SUM(OrderQuantity) AS TotalOrdered
  FROM Orders
  GROUP BY ProductID
)
SELECT p.ProductID, p.ProductName, g.TotalOrdered
FROM Products p
JOIN GroupedData g ON p.ProductID = g.ProductID;

Разбиение запроса на части упрощает его использование и помогает предотвратить путаницу.

Нет двух одинаковых с использованием GROUP_CONCAT

Для получения списка уникальных значений в рамках одной группы комбинация GROUP_CONCAT и DISTINCT обычно оказывается незаменимой:

SQL
Скопировать код
SELECT ProductID, GROUP_CONCAT(DISTINCT SupplierID ORDER BY SupplierID) AS Suppliers
FROM ProductSuppliers
GROUP BY ProductID;

Функция GROUP_CONCAT группирует значения SupplierID в рамках каждого ProductID, а DISTINCT обеспечивает уникальность значений в списке.

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

Представим таблицу заказов в виде спортивного табло:

Игрок Очки Передачи Подборы Команда
Джон Доу 30 5 10 A
Джейн Смит 20 7 8 A
Майк Браун 15 11 5 B
... ... ... ... ...

Сгруппировав данные по командам и применив к ним агрегирующие функции, получаем

SQL
Скопировать код
SELECT Team, SUM(Points), SUM(Assists), SUM(Rebounds)
FROM Scoreboard
GROUP BY Team;

И в конечном итоге имеем обобщенное представление результатов каждой команды:

Команда Общее число очков Общее число передач Общее число подборов
A 50 12 18
B 15 11 5
... ... ... ...

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

Временные прибежища

Временные таблицы могут оказаться незаменимым инструментом при работе со сложными данными:

SQL
Скопировать код
CREATE TEMPORARY TABLE TempSales
AS
SELECT salesperson, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY salesperson;

SELECT t.salesperson, t.total_sales
FROM TempSales t;

Их применение делает запросы более понятными и структурированными.

Спасательный VARCHAR

В задачах, связанных с соединением и группировкой, использование типа данных VARCHAR для текстовых полей может обеспечить точность и согласованность данных:

SQL
Скопировать код
SELECT s1.salesperson, s2.total_sales
FROM Sales s1
JOIN (
  SELECT salesperson, SUM(sales_amount) AS total_sales
  FROM Sales
  GROUP BY salesperson
) s2 ON s1.salesperson = s2.salesperson;

Для глаз и ума: форматированный вывод

Порядок в данных способствует ясности мысли, поэтому использование ORDER BY необходимо для структурированной визуализации данных:

SQL
Скопировать код
SELECT CategoryID, SUM(ProductSales) 
FROM ProductSalesData
GROUP BY CategoryID
ORDER BY SUM(ProductSales) DESC;

Сортировка категорий по объему продаж дает ясное представление о наиболее успешных сегментах.

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

  1. SQL GROUP BY Statement — основы использования GROUP BY в SQL.
  2. SQL GROUP BY | Intermediate SQL – Mode — полное руководство по использованию GROUP BY и агрегатных функций.
  3. sql – Использование group by на нескольких столбцах – Stack Overflow — подборка практических примеров и решений для GROUP BY с использованием нескольких столбцов.
  4. Vertabelo Database Modeler — советы по эффективной группировке в SQL с множеством примеров.
  5. Понимание сложных GROUP BY Clauses – YouTube — видеоурок по пониманию сложных конструкций GROUP BY.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой SQL-запрос используется для группировки данных по столбцу 'salesperson' и вычисления общей суммы продаж?
1 / 5
Свежие материалы

Загрузка...