Получить столбец в процентах на основе другого столбца в MySQL

0

У меня таблица платежей выглядит следующим образом:

+--------------+---------+
| Type         | Amount  |
+--------------+---------+
| General      | 500     |
| General      | 700     |
| Assets       | 450     |
| Business     | 270     |
| General      | 70      |
| Assets       | 350     |
+--------------+---------+

Мне нужна сумма и процентная группа по типу.

Мой запрос -

SELECT fld_type, SUM(fld_amount) FROM tbl_payment group by fld_type


+--------------+---------+
| Type         | Amount  |
+--------------+---------+
| General      | 1270    |
| Assets       | 800     |
| Business     | 270     | 
+--------------+---------+

Я просто получаю сумму, но не могу рассчитать процент по сумме суммы в этом случае 2340 и рассчитывать с каждым элементом группы, например, для общего -

1270 * 100/2340 = 56,27

как это --

+--------------+---------+----------+
| Type         | Amount  | Percent% |
+--------------+---------+----------+
| General      | 1270    |   54.27  |
| Assets       | 800     |   34.19  |
| Business     | 270     |   11.54  |
+--------------+---------+----------+

Любая помощь приветствуется.

Теги:
database

2 ответа

1
Лучший ответ

Чтобы получить процент для каждой группы, вы можете сделать это как

select fld_type, 
sum(fld_amount),
(sum(fld_amount) / t.total) * 100 percent
from tbl_payment 
cross join (
select sum(fld_amount) total from tbl_payment
) t
group by fld_type

демонстрация

  • 0
    Большое вам спасибо, это работает. Во-первых, хорошо ли использовать перекрестное соединение или ','?
  • 1
    зависит от оптимизатора запросов, но для получения необходимого процента сначала вы можете сделать это как перекрестное соединение или, выполнив подзапрос, я предпочитаю синтаксис перекрестного соединения
1

попробуйте это выражение

SELECT type,sum(amount),sum(amount)*100/(select sum(amount) from tbl_payment) FROM 'tbl_payment' group by type
  • 0
    вау .. намного проще, спасибо, чувак

Ещё вопросы

Сообщество Overcoder
Наверх
Меню