#mysql
Вопрос:
После выбора, где я получаю суммы, сгруппированные по идентификаторам, мне нужно также рассчитать процент каждой суммы по отношению к итоговым данным
Таблица MySQL выглядит следующим образом
|status|a|b1|b2|c1|c2|
-------------------------
|IMMA |1|0 |0 |1 |0 |
|IMMA |0|1 |1 |0 |1 |
|IMMA |1|1 |1 |0 |1 |
|IMMA |1|1 |1 |0 |1 |
Запрос, который я сейчас использую, таков
SELECT imma_dbase_full.`status`,
SUM(imma_dbase_full.`a`) as `A`,
SUM(imma_dbase_full.`b1`) SUM(imma_dbase_full.`b2`) as `B`,
SUM(imma_dbase_full.`c1`) SUM(imma_dbase_full.`c2`) as `C`
FROM imma_dbase_full
WHERE imma_dbase_full.`status` = 'IMMA'
GROUP BY imma_dbase_full.`status`;
На выходе получается
|status|A|B|C|
----------------
|IMMA |3|6|3|
Однако мне нужно создать вывод в виде следующего:
|status|A |B |C |
--------------------
|IMMA |3 |6 |3 |
|% |25%|50%|25%|
Возможно ли это с MySQL?
Комментарии:
1. Кажется немного странным. Почему вы не выполняете требуемую логику для % в части приложения/или отчете, если это для отчета? Так ли важно, чтобы это выглядело так … ?
Ответ №1:
Можно выполнить расчет в отдельном ВЫБОРЕ, а затем ОБЪЕДИНИТЬ их, чтобы они выглядели как одно целое, но это не очень хорошее решение. Для оптимизации было бы лучше рассчитать процент на уровне приложения.
SELECT `status`,
SUM(`a`) as `A`,
SUM(`b1` `b2`) as `B`,
SUM(`c1` `c2`) as `C`
FROM imma_dbase_full
WHERE `status` = 'IMMA'
UNION
SELECT '%',
SUM(`a`) / SUM(`a` `b1` `b2` `c1` `c2`) * 100,
SUM(`b1` `b2`) / SUM(`a` `b1` `b2` `c1` `c2`) * 100,
SUM(`c1` `c2`) / SUM(`a` `b1` `b2` `c1` `c2`) * 100
FROM imma_dbase_full
WHERE `status` = 'IMMA'
Ps.: В вашем исходном запросе GROUP BY
это не имеет смысла, так как вы фильтруете Status=IMMA
, поэтому будет только один статус, нет необходимости группироваться по.
Комментарии:
1. Спасибо, я попробую ваше решение. Проблемы заключаются в следующем: 1) Я новичок в MySQL (это также объясняет избыточную группу) 2) запрос используется wpDataTables, и я не вижу способа заставить плагин вычислять этот процент
2. Просто для записей запрос работает нормально, и сейчас это лучшее решение для меня. Поскольку я использовал запрос с таблицами данных WP, я понял, что инструкция UNION не принимается в плагине, поэтому я создал ПРЕДСТАВЛЕНИЕ в Mysql и вызвал представление напрямую.