– (вычитание) (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 названия, имена издателей и другие столбцы не отображаются.
! При создании подытогов (например, групп) можно выводить значения столбцов для каждой группы. Дополнительные сведения см. в разделе Группирование строк в результатах запроса (визуальные инструменты для баз данных).
Статистическая обработка значений по всем строкам
- Убедитесь, что таблица, в которой необходимо вычислить статистическую величину, присутствует на панели диаграмм
- Щелкните правой кнопкой мыши фон панели диаграммы, а затем в контекстном меню выберите пункт Группировать . Конструктор запросов и представлений добавляет столбец Группировать в сетку на панели критериев.
- Добавьте на панель критериев столбец, по которому необходимо вычислить статистическую величину. Убедитесь, что столбец помечен для вывода. Конструктор запросов и представлений автоматически назначает суммируемому столбцу псевдоним, который можно заменить более понятным. Дополнительные сведения см. в разделе Создание псевдонимов столбцов (визуальные инструменты для баз данных).
- В столбце сетки Группировать выберите нужную агрегатную функцию, например Sum, Avg, Min, Max, Count. Если необходимо вычислить статистические значения только для уникальных строк результирующего набора, выберите агрегатную функцию с параметром DISTINCT, например Min Distinct. Не выбирайте параметры Группировать, Выражениеили Где, так как они не применяются при статистической обработке всех строк. Конструктор запросов и представлений заменяет указанной агрегатной функцией имя столбца в инструкции, представленной на панели SQL . Например, инструкция SQL может иметь такой вид:
SELECT SUM(price) FROM titles
При выполнении запроса на панели результатов отображаются указанные статистические выражения.
Конструктор запросов и представлений обслуживает агрегатные функции в инструкции, отображаемой на панели SQL до тех пор, пока режим «Группировать по» явно не будет выключен. Поэтому при изменении типа запроса или изменении состава таблиц и возвращающих табличное значение объектов, присутствующих на панелях диаграмм, конечный запрос может содержать недопустимые агрегатные функции.