Как выбрать клиентов, которые внесли большую сумму платежей в декабре 2018 года, если учесть курс обмена
У меня есть таблица:
ID_Client Trandate Transum CurrencyRate Currency
--------------------------------------------------------
1 2018.12.01 100 1 UAH
1 2018.12.02 150 2 USD
2 2018.12.01 200 1 UAH
3 2018.12.01 250 3 EUR
3 2018.12.02 300 1 UAH
3 2018.12.03 350 2 USD
7 2019.01.08 600 1 UAH
но я думаю что "макс" совсем не то что мне нужно
SELECT ID_Client, MAX(Transum*CurrencyRate)
FROM `Payment.TotalPayments`
WHERE YEAR(Trandate) = 2018
AND MONTH(Trandate) = 12
Мне нужно что-то это
ID_Client Transum
3 1750
Где 1750 - это «гривна» и 350USD + 300 грн. + 250EUR, курс доллара США равен 2, курс евро 3.
Всего 2 ответа
Если вы пытаетесь получить сумму транзакций по клиенту за 2018 год и месяц декабрь, вы можете написать это так:
SELECT ID_Client, SUM(Transum*CurrencyRate) as payment_total_converted
FROM `Payment.TotalPayments`
WHERE YEAR(Trandate) = 2018
and MONTH(Trandate) = 12
group by ID_Client
Если вы хотите, чтобы вещи, сгруппированные по каждому клиенту, году и месяцу в заданном диапазоне дат, вы бы написали это так:
SELECT ID_Client, YEAR(Trandate) as tran_year, MONTH(Trandate) as tran_month,
SUM(Transum*CurrencyRate) as payment_total_converted
FROM `Payment.TotalPayments`
WHERE Trandate between -12-01' and -01-01'
group by ID_Client, YEAR(Trandate), MONTH(Trandate)
Я добавил имя столбца для вашего вычисляемого столбца, чтобы набор результатов оставался реляционным (столбцы должны иметь разные имена).
Я бы порекомендовал прочесть предложение SQL 'group by' ( https://www.w3schools.com/sql/sql_groupby.asp ) и объединить ( https://www.w3schools.com/sql/sql_count_avg_sum.asp , https://www.w3schools.com/sql/sql_min_max.asp ) операторов.
Я думаю, что вы хотите sum()
. Тогда вы можете order by
результату:
SELECT ID_Client, SUM(Transum*CurrencyRate) as total
FROM `Payment.TotalPayments`
WHERE Trandate >= -12-01' AND Transdate < -01-01'
GROUP BY ID_Client
ORDER BY total DESC;