Накопительная сумма SQL

Nakopitel Naa Summa Sql



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

В этом уроке мы узнаем, как реализовать и использовать накопительную сумму в SQL, используя различные методы и приемы.







Образец данных

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



Начните с создания базовой таблицы, в которой будет храниться информация о продукте.



СОЗДАТЬ ТАБЛИЦУ продуктов (
product_id INT ПЕРВИЧНЫЙ КЛЮЧ,
имя_продукта VARCHAR ( 255 ) ,
цена ДЕСЯТИЧНАЯ ( 10 , 2 )
) ;





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

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



ВСТАВИТЬ В продукты ( Product_id, Product_name, цена )
ЦЕННОСТИ
( 1 , «Код Visual Studio» , 10.00 ) ,
( 2 , «Возвышенный текст» , 80.00 ) ,
( 3 , «Пичарм Профессионал» , 199,00 ) ,
( 4 , «Затмение IDE» , 30.00 ) ,
( 5 , «IntelliJ IDEA Ultimate» , 699,00 ) ,
( 6 , «Рабочий стол GitHub» , 20.00 ) ,
( 7 , «Программное обеспечение ожидания» , 10.00 ) ,
( 8 , «Xcode» , 660,00 ) ,
( 9 , «НетБинс» , 0,00 ) ,
( 10 , 'Атом' , 60.00 ) ;

ПРИМЕЧАНИЕ. Приведенные данные являются полностью вымышленными. Он не отражает фактическую цену ни на один из перечисленных товаров.

Итоговая таблица выглядит следующим образом:

Накопительная сумма SQL (самостоятельное соединение)

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

Возьмем, к примеру, предыдущую таблицу «Продукты». Мы можем создать совокупную сумму столбца цен, как показано в следующем запросе:

ВЫБИРАТЬ
p1.product_id,
p1.имя_продукта,
p1.цена,
СУММА ( p2.цена ) КАК накопительная_сумма
ОТ
продукты п1
ПРИСОЕДИНИТЬСЯ
продукты п2
НА
p1.product_id > = p2.product_id
ГРУППА ПО
p1.product_id,
p1.имя_продукта,
p1.цена
СОРТИРОВАТЬ ПО
p1.product_id;

Вы заметили работу запроса? Если нет, оставайтесь с нами, пока мы объясняем это шаг за шагом.

В данном примере запроса мы начинаем с создания двух псевдонимов — «p1» и «p2» — для таблицы «products», которые позволяют нам выполнять самообъединение.

Затем мы приступаем к объединению «p1» и «p2» при условии, что «product_id» «p1» больше или равен «product_id» «p2».

На следующем шаге мы вызываем функцию sum(), которая в основном вычисляет совокупную сумму цен для каждой строки.

Наконец, мы группируем результаты, используя «product_id», «product_name» и «price», и упорядочиваем результаты.

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

Как видите, мы получаем общую сумму всех предыдущих строк. Последняя строка должна содержать общую сумму всех предыдущих строк.

Накопительная сумма SQL (оконные функции)

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

Если у вас есть такая база данных, как SQL Server, PostgreSQL или MySQL версии 8.0 и выше, это наиболее полезный и рекомендуемый метод определения совокупной суммы данного столбца.

Взгляните на пример, показанный ниже:

ВЫБИРАТЬ
Код товара,
наименование товара,
цена,
СУММА ( цена ) НАД ( ЗАКАЗАТЬ ПО product_id ) КАК накопительная_сумма
ОТ
продукты;

В этом случае мы начинаем с выбора столбцов «product_id», «product_name» и «price» из таблицы «products».

Затем мы используем функцию SUM() в качестве оконной функции, используя предложение OVER.

В предложении OVER мы указываем предложение ORDER BY, которое определяет порядок вычисления накопительной суммы.

Это должно вернуть аналогичный вывод, как показано ниже:

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

Заключение

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