Процентный запрос в MySQL

#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),'%') @CaswitoSlow

3. Работает в процентах, но все равно неверно для значения результата TotalBudget

4. Почему это неправильно? Я вижу, что это предлагаемое решение вернуло то же TotalBudget значение для каждого idUnit из них, что и то, что вы публикуете в вопросе. Если приведенные здесь значения неверны, то какое значение может быть правильным?