Перейти к содержимому

Как в sql посчитать разницу между суммами

  • автор:

– (вычитание) (Transact-SQL)

Вычитает одно число из другого (оператор арифметического вычитания). Также можно вычесть из даты определенное число дней.

Синтаксис

expression - expression 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

выражение
Любое допустимое выражение expression любого числового типа данных, кроме bit. Нельзя использовать с типами данных date, time, datetime2 или datetimeoffset.

Типы результата

Возвращает результат типа данных аргумента с более высоким приоритетом. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).

Примеры

А. Использование вычитания в инструкции SELECT

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

Применимо к: SQL Server и База данных SQL.

-- Uses AdventureWorks SELECT MAX(TaxRate) - MIN(TaxRate) AS 'Tax Rate Difference' FROM Sales.SalesTaxRate WHERE StateProvinceID IS NOT NULL; GO 

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

B. Использование вычитания из даты

Следующий пример вычитает указанное число дней из даты datetime .

Применимо к: SQL Server и База данных SQL.

-- Uses the AdventureWorks sample database DECLARE @altstartdate DATETIME; SET @altstartdate = CONVERT(DATETIME, 'January 10, 1900 3:00 AM', 101); SELECT @altstartdate - 1.5 AS 'Subtract Date'; 
Subtract Date ----------------------- 1900-01-08 15:00:00.000 (1 row(s) affected) 

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В. Использование вычитания в инструкции SELECT

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

-- Uses AdventureWorks SELECT MAX(BaseRate) - MIN(BaseRate) AS BaseRateDifference FROM DimEmployee; 

Как правильно посчитать разницу между суммами в запросе SELECT (a.sum) a_sum, (b.sum) b_sum FROM a INNER JOIN b ON a.id=b.id?

вконце таблички делаю запрос
SELECT (a.sum) a_sum, (b.sum) b_sum FROM a INNER JOIN b ON a.id=b.id
чтобы вывести итоговые суммы.
И тут возникает проблема при покупке одним чеком нескольких номенклатур — данные об оплате суммируются дополнительно в количестве позиций в чеке

01.01.2000 яблоко 1 шт 10р = 10р, оплата 10р
02.01.2000 груша 2 шт 20р = 40р, оплата 40р
03.01.2000 яблоко 1 шт 10р = 10р, оплата 50р
03.01.2000 груша 2 шт 20р = 40р, оплата 50р
последние строчки в оплатах считаются дважды

  • Вопрос задан более трёх лет назад
  • 247 просмотров

Как найти разницу в sql

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

Например, если необходимо найти разницу между двумя датами, можно использовать функцию DATEDIFF() . Эта функция возвращает количество временных единиц (например, дней, месяцев, лет) между двумя датами. Синтаксис функции выглядит следующим образом:

DATEDIFF(interval, startdate, enddate) 

где interval — это временная единица, которую необходимо использовать для измерения разницы, startdate — это начальная дата, а enddate — это конечная дата.

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

SELECT DATEDIFF(day, '2022-01-01', '2022-01-15') AS days_diff; 

Этот запрос вернет значение 14, что означает, что между 1 января 2022 года и 15 января 2022 года прошло 14 дней.

Если же необходимо найти разницу между двумя числовыми значениями, можно использовать оператор вычитания — . Например, чтобы найти разницу между двумя числами в таблице orders, можно использовать следующий запрос:

SELECT price_paid - price_listed AS price_diff FROM orders; 

Этот запрос вернет столбец price_diff, содержащий разницу между значениями в столбцах price_paid и price_listed.

Получение суммарных или статистических значений для всех строк в таблице (визуальные инструменты для баз данных)

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

SELECT SUM(price) FROM titles 

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

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

SELECT AVG(price), SUM(price) FROM titles 

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

Можно также подсчитать, сколько всего в таблице содержится строк, или строк, удовлетворяющих определенному условию. Дополнительные сведения см. в разделе Подсчет строк в таблице (визуальные инструменты для баз данных).

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

! При создании подытогов (например, групп) можно выводить значения столбцов для каждой группы. Дополнительные сведения см. в разделе Группирование строк в результатах запроса (визуальные инструменты для баз данных).

Статистическая обработка значений по всем строкам

  1. Убедитесь, что таблица, в которой необходимо вычислить статистическую величину, присутствует на панели диаграмм
  2. Щелкните правой кнопкой мыши фон панели диаграммы, а затем в контекстном меню выберите пункт Группировать . Конструктор запросов и представлений добавляет столбец Группировать в сетку на панели критериев.
  3. Добавьте на панель критериев столбец, по которому необходимо вычислить статистическую величину. Убедитесь, что столбец помечен для вывода. Конструктор запросов и представлений автоматически назначает суммируемому столбцу псевдоним, который можно заменить более понятным. Дополнительные сведения см. в разделе Создание псевдонимов столбцов (визуальные инструменты для баз данных).
  4. В столбце сетки Группировать выберите нужную агрегатную функцию, например Sum, Avg, Min, Max, Count. Если необходимо вычислить статистические значения только для уникальных строк результирующего набора, выберите агрегатную функцию с параметром DISTINCT, например Min Distinct. Не выбирайте параметры Группировать, Выражениеили Где, так как они не применяются при статистической обработке всех строк. Конструктор запросов и представлений заменяет указанной агрегатной функцией имя столбца в инструкции, представленной на панели SQL . Например, инструкция SQL может иметь такой вид:
SELECT SUM(price) FROM titles 

При выполнении запроса на панели результатов отображаются указанные статистические выражения.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *