#mysql
Вопрос:
У меня есть 2 таблицы, как показано ниже :
Таблица 1
|idUnit | Budget |
|112 | 1000 |
|112 | 2000 |
|113 | 4000 |
Табель_2
|idUnit | Real2 |
|112 | 500 |
|112 | 100 |
|113 | 200 |
Мой вопрос, как сделать таблицу, как показано ниже, в процентах:
| idUnit | TotalBudget | TotalReal2 | Percentage
| 112 | 3000 | 600 | ? (15%) |
| 113 | 4000 | 200 | ? (5%) |
Мой вопрос перед :
SELECT t1.idUnit, SUM(Budget) AS TotalBudget, t2.TotalReal2
FROM Tabel_1 AS t1
JOIN (SELECT idUnit, SUM(Real2) AS TotalReal2
FROM Tabel_2 GROUP BY idUnit
) AS t2 ON t1.idUnit = t2.idUnit
GROUP BY t1.idUnit;
Комментарии:
1. Какова ваша процентная логика?
2. Я не могу понять, почему
idUnit = 112
равно 15%3. (общий реальный/общий бюджет)*100
4. Но
600/3000
должно быть 20%?5. ибп извини, Д-Ши, ты прав 20%
Ответ №1:
Вы можете попробовать использовать два подзапроса, а затем выполнить ОБЪЕДИНЕНИЕ, рассчитав свой столбец по TotalBudget
и totalbudget
Запрос 1:
SELECT t1.idUnit,
t1.TotalBudget,
t2.TotalReal2,
CONCAT((TotalReal2/totalbudget)*100,'%') Percentage
FROM (
SELECT idUnit,SUM(Budget) TotalBudget
FROM Tabel_1
GROUP BY idUnit
) AS t1
INNER JOIN (
SELECT idUnit,
SUM(Real2) AS TotalReal2
FROM Tabel_2
GROUP BY idUnit
) AS t2 ON t1.idUnit = t2.idUnit
| idUnit | TotalBudget | TotalReal2 | Percentage |
|--------|-------------|------------|------------|
| 112 | 3000 | 600 | 20.0000% |
| 113 | 4000 | 200 | 5.0000% |
Комментарии:
1. TotalBudget неверно, и как разделить процент на две десятичные цифры
2. Добавьте
ROUND
и определите десятичные знаки, такие какCONCAT(ROUND((TotalReal2/totalbudget)*100,2),'%')
@CaswitoSlow3. Работает в процентах, но все равно неверно для значения результата TotalBudget
4. Почему это неправильно? Я вижу, что это предлагаемое решение вернуло то же
TotalBudget
значение для каждогоidUnit
из них, что и то, что вы публикуете в вопросе. Если приведенные здесь значения неверны, то какое значение может быть правильным?