BonBonSlick
@BonBonSlick
Junior Web Developer Trainee

Как подсчитать баланс пользователей?

Это одна из задач, время выполнения 11 минут после открытия спойлера.
spoiler

Create a query to calculate balance for each player. Balance is calculated in a following way:
List must have following columns:
deposit + adjustment_up - adjustment_down - rollback (referenced deposit amount) - rollback (referenced adjus

name           description

balance => result of provided formula
owner_id => ID of wallet owner

tables:
user (id, email STRING)
wallet (id, user_id FK INT)
transaction (id, type STRING, amount INT, wallet_id FK INT)

Примечание, deposit ето тип транзакции, остальные переменные лично без понятия откуда и что там, такова задача, вопросы задавать было невозможно т.к. задача в атономном режиме, решил или нет, без вопросов. Соответственно завалил так же без вопросов. Могу предположить что то все динамические параметры и каково их значение не влияет на решение.

Вопрос с целью получить хотя бы примерное решение, понять как сформировать подзапрос с формулой подсчета значений полей из других таблиц и внешними динамическими переменными, параметрами.

UPD. adjustment_down, deposit, adjustment_up ето типы транзакций. Выкладываю задачу спустя 3 недели так что уже забыл значения, думаю компания нашла кого хотела за ето время.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT usesr.id, SUM(CASE WHEN transaction.type IN ('deposit', 'adjustment_up',)
                          THEN amount
                          WHEN transaction.type IN ('adjustment_down', 'rollback')
                          THEN -amount
                          ELSE 0
                          END) balance
FROM user
JOIN wallet ON iser.id = wallet.user_id
JOIN transaction ON wallet.id = transaction.wallet_id
GROUP BY user.id


Если возможно, что у юзера нет транзакций, то использовать LEFT JOIN, а SUM() обернуть в COALESCE().

PS. Памятуя предыдущую тему. Сложность - те же 2/10, чистое время на написание всего ответа 2 минуты 15 секунд (только запрос - 1 минута 25 секунд).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ComodoHacker
Могу предположить, что adjustment_up, adjustment_down и rollback это тоже типы транзакций. Нужно найти все такие транзакции в таблице transaction, относящиется к конкретному wallet_id и подставить в формулу.
Далее нужно подсчитать общий баланс по кошелькам, принадлежащим одному юзеру, и его выдать в качестве результата.

P.S. Откуда задача?
Ответ написан
Ваш ответ на вопрос

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

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