sql квест с количеством и обменным курсом - PullRequest
0 голосов
/ 16 мая 2019

Как выбрать клиентов, которые сделали большую сумму платежей в декабре 2018 года, если учесть курс обмена

У меня есть таблица:

  • Дата сделки - дата транзакции
  • Transum числовой (20,2) - сумма платежа
  • CurrencyRate numeric (20,2) - курс обмена валют


 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 ]

0 голосов
/ 16 мая 2019

Если вы пытаетесь получить сумму суммы транзакции по клиенту за 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 '2018-12-01' and '2019-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) операторы.

0 голосов
/ 16 мая 2019

Я думаю, что вы хотите sum().Тогда вы можете order by результат:

SELECT ID_Client, SUM(Transum*CurrencyRate) as total 
FROM `Payment.TotalPayments` 
WHERE Trandate >= '2018-12-01' AND Transdate < '2019-01-01'
GROUP BY ID_Client
ORDER BY total DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...