Я хотел бы выяснить, у кого больше всего прибыли на основе таблицы транзакций.(топлист)
Table: Transactions
+--------------+
| id |
+--------------+
| buy_user_id |
+--------------+
| sell_user_id |
+--------------+
| amount |
+--------------+
| price |
+--------------+
В этой таблице содержится информация о транзакциях, которые произошли во время обмена между двумя лицами.«buy_user_id» является покупателем, а «sell_user_id» является продавцом.
«сумма» - это количество купленных акций, цена по какой цене (в долларах США).Тогда оборот (сумма * цена).
Я хотел бы выяснить, какие пользователи получили наибольшую прибыль.Если вы берете общую прибыль за вычетом общих потерь, конечный результат должен быть 0.
Например:
+---+---------+--------+
| # | User ID | Profit |
+---+---------+--------+
| 1 | 13 | +1200 |
+---+---------+--------+
| 2 | 52 | +300 |
+---+---------+--------+
| 3 | 29 | -500 |
+---+---------+--------+
| 4 | 72 | -1000 |
+---+---------+--------+
Предложения?
Вот полныйНапример, с таблицей транзакций сначала:
+----+-------------+--------------+--------+-------+
| id | buy_user_id | sell_user_id | amount | price |
+----+-------------+--------------+--------+-------+
| 1 | 13 | 72 | 1000 | 0.01 | $10 paid by 13 for 1000 stocks (now 13 has $10 loss while 72 has $10 profit)
+----+-------------+--------------+--------+-------+
| 2 | 72 | 13 | 1000 | 1.01 | $1010 paid by 72 for 1000 stocks (now 72 has $1000 loss while 13 has $1000 profit)
+----+-------------+--------------+--------+-------+
| 3 | 13 | 72 | 500 | 0.02 | $10 paid by 13 for 500 stocks (now 72 has $990 loss while 13 has $990 profit)
+----+-------------+--------------+--------+-------+
| 4 | 72 | 13 | 100 | 5.10 | $510 paid by 72 for 100 stocks (now 72 has $1500 loss while 13 has $1500 profit)
+----+-------------+--------------+--------+-------+
| 5 | 29 | 13 | 400 | 1.25 | $500 paid by 29 for 400 stocks (now 29 has $500 loss while 13 has $2000 profit)
этот пример должен сгенерировать такой результат:
+---+---------+--------+
| # | User ID | Profit |
+---+---------+--------+
| 1 | 13 | +2000 |
+---+---------+--------+
| 2 | 72 | -1500 |
+---+---------+--------+
| 3 | 29 | -500 |
+---+---------+--------+
Каков наилучший способ сделать это?И имеет ли это смысл?
Моя попытка:
SELECT sell_user_id as user_id, SUM(amount*price) as amount, 'sell' as type
FROM exchange_transactions
GROUP BY sell_user_id
UNION
SELECT buy_user_id as user_id, SUM(amount*price) as amount, 'buy' as type
FROM exchange_transactions
GROUP BY buy_user_id