Предположим, у меня есть несколько таблиц в моей базе данных. Первая из них - таблица DA, имеющая три столбца, и я хочу запросить таблицу других на основе PROJECT_ID.
Следующая таблица WORK. Я хочу рассчитать SUM из work_bonus и work_salary по конкретному da_id.
Следующая таблица - таблица расходов
Следующий - таблица продуктов
Последняя - сводная таблица. Я хочу напечатать DA, как ниже этой таблицы. Это означает, что я хочу найти da на основе project_id "15", поэтому я получу два da_id из таблицы da, т.е. da_id 1 и 2. Теперь в таблице работ, расходов и продуктов есть поле da_id. Поэтому я хочу распечатать сводку DA из таблицы работ, расходов и продуктов. Здесь, в таблице WORK, DA_ID 1 имеет две записи, то есть work_id 1 и 3. Я хочу суммировать ее значение WORK_BONUS и WORK_SALARY на основе DA_ID, что означает, что общий WORK_BONUS из DA_ID 1 будет равен 40, а WORK_SALARY из DA_ID 1 будет 400. Как и в этом случае, rest расчет таблицы будет таким же. Вот финальная таблица, которую я хочу. Так что, пожалуйста, помогите мне рассчитать результат в mysql? Спасибо
Текст version-
DA TABLE
-------------------------------------------------
| DA_ID | PROJECT_ID | DA_DATE |
-------------------------------------------------
| 1 | 15 | 8/7/18 |
-------------------------------------------------
| 2 | 15 | 4/7/18 |
-------------------------------------------------
| 3 | 14 | 6/7/18 |
-------------------------------------------------
WORK TABLE
--------------------------------------------------------------------
| WORK_ID | DA_ID | WORK_BONUS | WORK_SALARY |
--------------------------------------------------------------------
| 1 | 1 | 10 | 100 |
--------------------------------------------------------------------
| 2 | 2 | 20 | 200 |
-------------------------------------------------------------------
| 3 | 1 | 30 | 200 |
--------------------------------------------------------------------
EXPENSE TABLE
-----------------------------------------------------
| EXP_ID | DA_ID | EXP_TOTAL |
-----------------------------------------------------
| 1 | 1 | 10 |
-----------------------------------------------------
| 2 | 2 | 20 |
-----------------------------------------------------
| 3 | 1 | 30 |
-----------------------------------------------------
PRODUCT TABLE
-------------------------------------------------------------
| PRODUCT_ID | DA_ID | PRODUCT_TOTAL |
-------------------------------------------------------------
| 1 | 1 | 5 |
-------------------------------------------------------------
| 2 | 2 | 10 |
-------------------------------------------------------------
| 3 | 1 | 15 |
-------------------------------------------------------------
SUMMARY TABLE
----------------------------------------------------------------------------------------
| SUMMARY_ID | DA_ID | TOTAL_BONUS | TOTAL_EXPENSE | TOTAL_PRODUCT |
----------------------------------------------------------------------------------------
| 1 | 1 | 40 | 400 | 20 |
----------------------------------------------------------------------------------------
| 2 | 2 | 20 | 200 | 10 |
----------------------------------------------------------------------------------------
Есть два способа добиться этого с помощью запроса. Может быть более подходящим способом
SELECT D.DA_ID,
(SELECT SUM(WORK_BONUS) FROM 'WORK' W WHERE W.DA_ID = D.DA_ID) as TOTAL_BONUS,
(SELECT SUM(WORK_SALARY) FROM 'WORK' W WHERE W.DA_ID = D.DA_ID) as TOTAL_SALARY,
(SELECT SUM(EXP_TOTAL) FROM EXPENSE E WHERE E.DA_ID = D.DA_ID) as TOTAL_EXPENSE,
(SELECT SUM(PRODUCT_TOTAL) FROM PRODUCT P WHERE P.DA_ID = D.DA_ID) as TOTAL_PRODUCT
FROM DA as D left join WORK as W on D.DA_ID = W.DA_ID
WHERE D.PROJECT_ID = 15
GROUP BY D.DA_ID;
SELECT D.DA_ID, SUM(WORK_BONUS) as TOTAL_BONUS, SUM(WORK_SALARY) as TOTAL_SALARY,
(SELECT SUM(EXP_TOTAL) FROM EXPENSE E WHERE E.DA_ID = D.DA_ID) as TOTAL_EXPENSE,
(SELECT SUM(PRODUCT_TOTAL) FROM PRODUCT P WHERE P.DA_ID = D.DA_ID) as TOTAL_PRODUCT
FROM DA as D left join WORK as W on D.DA_ID = W.DA_ID
WHERE D.PROJECT_ID = 15
GROUP BY D.DA_ID;
Этот запрос поможет вам:
SELECT * FROM
(
SELECT sum(WORK_BONUS) AS TOTAL_BONUS,
sum(WORK_SALARY) AS TOTAL_SALARY
FROM WORK WHERE DA_ID = ?)
) t1,
(
SELECT sum(EXP_TOTAL) as TOTAL_EXPENSE
FROM EXPENSE WHERE DA_ID = ?
) t2,
(
SELECT sum(PRODUCT_TOTAL) AS TOTAL_PRODUCT
FROM PRODUCT WHERE DA_ID = ?
);