MySQL Рассчитать количество, сумму и процент с группой по - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть таблица платежей со следующими полями:

  • id (int)
  • статус (успешно, не удалось, возвращается)
  • сумма (int)
  • pdate (в формате Ymd)

Мне нужно написать запрос, чтобы получить за каждый день, сколько платежей было успешным, сколько было неудачных и сколько было возвращено, с процентомна этот день.Мой текущий запрос такой:

select pdate, status, count(*) as total, sum(amount) as total_amount
from payments
group by pdate, status

Запрос успешно возвращает количество обработанных платежей за каждый день и статус:

pdate        status       total   total_amount
2019-04-01,  successful,     10,           100
2019-04-01,  failed,          5,            50
2019-04-01,  refunded,        5,            50
2019-04-02,  successful,     12,           120
2019-04-02,  failed,          5,            50
2019-04-02,  refunded,        3,            30

Но я не знаю, как это сделатьрассчитать процент за каждый платеж за каждый деньНапример, для 2019-04-01 было 20 платежей, поэтому процент successful платежей = 50%, failed = 25% и refunded = 25%.

КакМогу ли я заставить его вернуть это:

pdate        status       total   total_amount    percentage
2019-04-01,  successful,     10,           100,          50%        
2019-04-01,  failed,          5,            50,          25%
2019-04-01,  refunded,        5,            50,          25%
2019-04-02,  successful,     12,           120,        58.3%
2019-04-02,  failed,          5,            50,        16.6%
2019-04-02,  refunded,        3,            30,          25%

Как видите, процент рассчитывается на основе общего количества платежей за каждый день.

Заранее спасибо!

1 Ответ

1 голос
/ 10 апреля 2019

Вы можете использовать подзапрос в вашем операторе select для выполнения этого.См. Ниже:

select 
    p1.pdate, 
    p1.status, 
    count(*)  as total, 
    sum(p1.amount) as total_amount, 
    concat(round(( count(*)/
        (select count(*) from payments p2 where p2.pdate = p1.pdate group by pdate ) 
    * 100 ),2),'%') AS percentage 
from 
    payments p1 
group by pdate, status;

Это даст вам то, что вы ищете.Посмотрите этот пример: https://www.db -fiddle.com / f / e6a6CJb3pqLzcRz18SGeZ2 / 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...