Как в одном SQL запросе сложить сумму всех балансов и конвертировать значение из валюты в рубли?

Подскажите как правильно решить задачу по MySQL.

Есть две таблицы Вклады и Клиенты.

60111df0c3846849762151.jpeg

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

Написал запрос, но он не валидный, MySQL выводит ошибку.
Мой запрос:

SELECT client, sum(balance) FROM Dep group by client WHERE currency = rur
UNION SELECT client, sum(balance*75) FROM Dep group by client
WHERE currency = usd UNION
SELECT client, sum(balance*91) FROM Dep group by client WHERE currency = eur


Возможно здесь UNION SELECT не подходит и нужна более сложная конструкция?
  • Вопрос задан
  • 4416 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
В случае если курсы обмена валют хранятся в базе данных (как оно должно быть) подучаем простой запрос вида:
SELECT clients.name, SUM(balance*rate) as rub_balance
FROM clients
JOIN deposits d ON d.client_id = clients.id
JOIN currencies cur on d.currency = cur.id  
GROUP BY clients.id, clients.name
;


В противном случае посльзуемся конструкцией CASE:

SELECT 
	clients.name, 
	SUM(balance *
		CASE d.currency
			WHEN 'USD' THEN 75.64
			WHEN 'EUR' THEN 91.67
			ELSE 1
		END
	) as rub_balance
FROM clients
JOIN deposits d ON d.client_id = clients.id


Здесь можно проверить SQL запрос
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `c`.`client`, IFNULL(`d`.`sum`, 0)
  FROM (
    SELECT `client`,
           SUM(`balance` * IF(`currency` = 'USD', :usd, IF(`currency` = 'EUR', :eur, 1))) AS `sum`
      FROM `Dep`
      GROUP BY `client`
  ) AS `d`
  RIGHT JOIN `Contact` AS `c` ON `c`.`client_id` = `d`.`client`
Ответ написан
Ваш ответ на вопрос

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

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