Как в одной таблице по разным признакам в столбце вычесть сумма одних значений из других?

Добрый день. Не знаю как правильно задать вопрос, но лучше попробую рассказать что есть:

Предположим есть таблица:
CREATE TABLE IF NOT EXISTS tablename(
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `type` int(11) NOT NULL,
    `sum` varchar(50) NOT NULL default '0',
    PRIMARY KEY ( `id` )	
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Это таблица приходов/расходов денежных средств.
type=0 - приход, type=1 - расход
sum - сумма прихода/расхода

Есть 10 строк, 5 приходов и 5 расходов.
Можно ли одним запросом получить результат суммирования всех приходов(между приходами), расходов(между расходами) и вычесть приходы из расходов? То есть получить как бы "баланс".
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Вот возможное решение:
select
	sum(if(`type` = 0, `sum`, 0)) `income`,
	sum(if(`type` = 1, `sum`, 0)) `outcome`,
	sum(if(`type` = 0, `sum`, -`sum`)) `balance`
from tablename;


Test SQL online
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@402d
начинал с бейсика на УКНЦ в 1988
можно sum агрегатная функция может работать и по выражениям.
https://metanit.com/sql/mysql/6.4.php
класика case есть во всех диалектах SQL
if - упрошенный вариант в муське и ряде других

Получается нам нужно посчитать для строк подходящих под условия сумму выражения
амоунт по операции умножит на 1 или -1.
p.s.
поле в базе лучше не называть именами ключевых слов или функций
иначе все времы в кавычки брать придется. это я про имя поля sum
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы