/
Вопросы и ответы
/
SQL
/

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

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

5 лет назад

Человек-Молекула

Ответы

1

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

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

1
DATEDIFF(interval, startdate, enddate)

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

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

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

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

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

1
2
SELECT price_paid - price_listed AS price_diff
FROM orders;

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

4 года назад

Даниил Першин

0

«Разница» в SQL бывает трёх видов: между числами, между датами и между наборами строк. Для каждого случая свой способ.

Разница между числами

Обычное вычитание в запросе:

1
2
SELECT name, plan, fact, fact - plan AS diff
FROM sales;

Разницу по модулю, без знака, даёт ABS(): ABS(fact - plan).

Разница с предыдущей строкой

Изменение относительно прошлого месяца считают оконной функцией LAG():

1
2
3
4
SELECT month,
       revenue,
       revenue - LAG(revenue) OVER (ORDER BY month) AS growth
FROM monthly_revenue;

Для первой строки предыдущей нет, и growth будет NULL.

Разница между датами

СУБДДни между датами
PostgreSQLend_date - start_date (для типа date)
MySQLDATEDIFF(end_date, start_date)
SQL ServerDATEDIFF(day, start_date, end_date)
SQLitejulianday(end_date) - julianday(start_date)

В PostgreSQL разница двух timestamp — интервал. Количество часов из него: EXTRACT(EPOCH FROM end_at - start_at) / 3600.

Строки, которые есть в одной таблице, но нет в другой

Оператор EXCEPT вычитает один набор строк из другого:

1
2
3
SELECT email FROM subscribers
EXCEPT
SELECT email FROM customers;

Получатся подписчики, которые ещё не покупали. В MySQL EXCEPT появился в версии 8.0.31, в Oracle он называется MINUS. Тот же результат через LEFT JOIN:

1
2
3
4
SELECT s.email
FROM subscribers s
LEFT JOIN customers c ON c.email = s.email
WHERE c.email IS NULL;

Разница между суммами

1
2
3
4
SELECT
  SUM(CASE WHEN type = 'income' THEN amount ELSE 0 END) -
  SUM(CASE WHEN type = 'expense' THEN amount ELSE 0 END) AS balance
FROM transactions;

Запросы с агрегатами и оконными функциями разбирают в курсе «SQL для разработчиков».

месяц назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845