Продвинутая аналитика на SQL

Теория: Агрегация для столбчатой диаграммы

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

Столбчатые диаграммы — это полезный инструмент визуализации, когда нужно сравнить числовые величины по разным категориям. Знания из урока помогут строить отчеты с использованием столбчатых диаграмм.

Столбчатая диаграмма

Столбчатые диаграммы используют, чтобы визуализировать, какое число соответствует каждой категории.

Предположим, у нас есть таблица суммарных продаж товаров по разным типам:

total_sales

sub_categorysales
Accessories13285.68
Appliances6830.277
Art2820.666
......

В этой таблице есть два столбца:

  1. Тип товара — значение, которое выражается строкой. Категориальное значение
  2. Суммарные продажи — числовое значение

В столбчатой диаграмме каждая категория наносится отдельным делением на одну из осей диаграммы. Это деление — основание столбца. По другой из осей мы откладываем числовое значение категории. Высота столбца будет равна этому числу.

Столбчатые диаграммы бывают:

  1. Вертикальные
  2. Горизонтальные

В вертикальной диаграмме столбцы направлены по вертикальной оси, а в горизонтальной — по горизонтальной оси.

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

vertical_bar_chart

На этом графике мы изобразили вертикальную столбчатую диаграмму суммарных продаж.

Горизонтальная столбчатая диаграмма выглядит аналогично, но с перевернутыми осями:

horizontal_bar_chart

Мы видим, что горизонтальная столбчатая диаграмма отличается от вертикальной только расположением признаков по осям.

Агрегация суммарных продаж для каждого товара

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

sales

order_idorder_dateship_dateship_modecustomer_idcustomer_namesegmentcountrycitystatepostal_coderegionproduct_idcategorysub_categoryproduct_namesalesquantitydiscountprofit
CA-2014-1038002014-01-03 00:00
2014-01-07 00:00
Standard ClassDP-13000Darren PowersConsumerUnited StatesHoustonTexas77095CentralOFF-PA-10000174Office SuppliesPaperMessage Book, Wirebound, Four 5 1/2" X 4" Forms/Pg., 200 Dupl. Sets/Book16.44820.25.551199999999998
CA-2014-1123262014-01-04 00:00
2014-01-08 00:00
Standard ClassPO-19195Phillina OberHome OfficeUnited StatesNapervilleIllinois60540CentralOFF-LA-10003223Office SuppliesLabelsAvery 50811.78430.24.271699999999999
CA-2014-1123262014-01-04 00:00
2014-01-08 00:00
Standard ClassPO-19195Phillina OberHome OfficeUnited StatesNapervilleIllinois60540CentralOFF-ST-10002743Office SuppliesStorageSAFCO Boltless Steel Shelving272.73630.2-64.77480000000001
............................................................

В этой таблице есть такие столбцы:

  1. order_id — ID заказа
  2. order_date — дата заказа
  3. ship_date — дата отгрузки товара
  4. ship_mode — класс отгрузки
  5. customer_id — ID покупателя
  6. customer_name — имя покупателя
  7. segment — категория покупателя
  8. country — страна
  9. city — город
  10. state — штат / округ
  11. postal_code — почтовый индекс
  12. region — регион
  13. product_id — ID товара
  14. category — категория товара
  15. sub_category — подкатегория товара
  16. product_name — наименование товара
  17. sales — сумма продаж по заказу
  18. quantity — количество единиц товара в заказе
  19. discount — скидка на заказ
  20. profit — прибыль по заказу

Мы хотим получить таблицу суммарных продаж по подкатегориям товаров и визуализировать ее с помощью столбчатой диаграммы. Для этого мы агрегируем таблицу sales по подкатегориям товаров. Мы будем использовать столбцы sub_category и sales.

Агрегация для визуализации столбчатой диаграммой «схлопывает» данные о продажах, суммируя все продажи по каждой из категорий. Так мы получаем суммарные продажи по каждой уникальной категории товаров и, например, можем узнать наиболее прибыльную категорию.

Агрегируем таблицу продаж в суммарные продажи по подкатегориям товаров средствами SQL.

Для этого мы откроем базу данных bar_chart. В ней содержится таблица sales, в которой 1000 строк и 20 столбцов. Ее начало мы видели в таблице Sales выше. Напишем SQL-запрос для агрегации:

SELECT
    sub_category,
    SUM(sales) AS total_sales
FROM sales
GROUP BY sub_category;

В результате этого запроса мы получили таблицу:

total_sales

sub_categorytotal_sales
Paper6648.283999999999
Labels1308.4160000000002
Storage20823.572
Binders21403.09499999999
Art2820.6659999999983
Chairs32388.257999999994
Phones38570.604
Fasteners380.5800000000001
Furnishings6706.3640000000005
Accessories13285.68
Envelopes1605.862
Bookcases6707.1536
Appliances6830.276999999999
Tables24083.6545
Supplies12940.315999999995
Machines26854.097
Copiers5309.888000000001

Ссылка на таблицу

В этой таблице представлены суммарные продажи для каждой из подкатегорий товаров.

Скопируем таблицу в Google Sheets, заменим в столбце total_sales все точки на запятые и построим столбчатую диаграмму:

total_sales

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

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

SELECT
    sub_category,
    SUM(sales) AS total_sales
FROM sales
GROUP BY sub_category
ORDER BY total_sales DESC;

С помощью такого запроса мы получили отсортированную таблицу:

ordered_total_sales

sub_categorytotal_sales
Phones38570.604
Chairs32388.257999999994
Machines26854.097
Tables24083.6545
Binders21403.09499999999
Storage20823.572
Accessories13285.68
Supplies12940.315999999995
Appliances6830.276999999999
Bookcases6707.1536
Furnishings6706.3640000000005
Paper6648.283999999999
Copiers5309.888000000001
Art2820.6659999999983
Envelopes1605.862
Labels1308.4160000000002
Fasteners380.5800000000001

Ссылка на таблицу

Здесь представлена отсортированная по убыванию таблица продаж по подкатегориям товаров.

Теперь построим по этой таблице горизонтальную столбчатую диаграмму. Для этого скопируем таблицу в Google Sheets и выберем тип диаграммы «Линейчатая»:

total_sales_ordered

Мы построили горизонтальную столбчатую диаграмму по отсортированной таблице суммарных продаж по категориям. Видим, что самые прибыльные категории — это телефоны и стулья.

Теперь попробуем исключить из агрегации штат Нью-Йорк. Напишем агрегацию на SQL с условием:

SELECT
    sub_category,
    SUM(sales) AS total_sales
FROM sales
WHERE state <> 'New York'
GROUP BY sub_category
ORDER BY total_sales DESC;

Посмотрим на таблицу, которую мы получили:

total_sales_without_NY

sub_categorytotal_sales
Phones35579.044
Chairs31957.59
Machines26854.097
Binders20346.006999999998
Tables19826.6605
Storage18685.032
Supplies12797.215999999997
Accessories11828.79
Furnishings6533.994000000001
Bookcases6353.5856
Appliances6255.097
Paper5818.993999999999
Copiers4749.896000000001
Art2527.1859999999983
Envelopes1305.2619999999995
Labels1294.016
Fasteners380.5800000000001

Ссылка на таблицу

В этой таблице содержатся суммарные продажи по подкатегориям товаров всех штатов кроме штата Нью-Йорк.

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

total_sales_without_NY

Мы видим, что самыми прибыльными категориями все еще остаются телефоны и стулья.

Выводы

В этом уроке мы рассмотрели, что такое агрегация для столбчатой диаграммы. Мы получили таблицу суммарных продаж по категориям товаров, построили вертикальную столбчатую диаграмму, горизонтальную диаграмму по отсортированной таблице и нашли самые прибыльные категории товаров.

Столбчатые диаграммы часто используются, когда нужно изобразить абсолютные числовые значения по разным категориям относительно друг друга. Знания о том, как агрегировать данные для столбчатой диаграммы, позволят строить полезные и информативные отчеты.

Рекомендуемые программы