@bromterier
Люблю писать код. Начинающий

Как подсчитать в одном запросе значения двух параметров?

Всем привет!
Есть, к примеру, вот такая таблица:

id | name | money | paymentType |
-----------------------------------------
1 | Иван | 1000 | cash |
-----------------------------------------
2 | Иван | 3000 | credit |
-----------------------------------------
3 | Иван | 2300 | cash |

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

Иван cash -> 3300 credit->3000

У меня запрос пока выглядет так, но он выводит подсчет по каждому типу в отдельной строке (ну это и естественно):

(select name, sum(money), from exmp where paymentType = 'Cash' group by name)
UNION
(select name, sum(money), from exmp where paymentType = 'Credit' group by name)
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
запросы не проверял

select exmp.name, sum(exmp.money), sum(exmp_t.money) from exmp 
left join exmp as exmp_t on exmp_t.name = exmp.name
where exmp.paymentType = 'Cash' AND exmp_t.paymentType = 'Credit' group by exmp.name


или

select name, sum(money) as cash, (select sum(exmp_t.money) from exmp as exmp_t where exmp_t.paymentType = 'Credit' AND exmp_t.name=exmp.name) as credit from exmp where paymentType = 'Cash' group by name
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
SELECT t.Name, 
       SUM(CASE WHEN t.PaymentType='cash' THEN t.Money ELSE 0 END) AS Cash,
       SUM(CASE WHEN t.PaymentType='credit' THEN t.Money ELSE 0 END) AS Credit
FROM table t
GROUP BY t.Name


Может, я что-то в синтаксисе напутал, но вроде в MS SQL есть CASE :-)
Ответ написан
Комментировать
thewind
@thewind
php программист, front / backend developer
Sum() + group by paymentType

Если вам надо обойтись без других языков, то можно так. Хотя вариант с subselect - медленный.
SELECT t.`name`, SUM(t.`money`) as `cash`, (SELECT SUM(`money`) FROM `table` WHERE `paymentType`='credit' AND `name`=t.`name`) as `credit` FROM `table` t WHERE t.`paymenType`='cash' GROUP BY t.`name`
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы