MySQL — Суммирование результата и объединение в одном запросе

#mysql #mysql-workbench

#mysql #mysql-workbench

Вопрос:

Общая сумма часов для соответствующей программы из таблицы 1 должна умножаться на prod_count в таблице 2.

Например: давайте возьмем пользовательскую оперативную память

оперативная память работала над двумя программами pro-1 = 9hr (5 4) и pro-2 = 6 hr [из таблицы 1]

prod_count для pro-1 is 200 и pro-2 is 120 [из таблицы 2]

поэтому в идеале это должно быть 200*9 = 1800 и 120*6 = 720

итак total is (1800 720) = 2520

total task count is (656 23 44) = 723 [из таблицы 1]

Результат для оперативной памяти должен быть ram, 2520 , 723

Таблица 1

 | id | name  | program | task_hours | task_count |
|----|-------|---------|------------|------------|
| 1  | raj   | pro-1   | 6.5        | 344        |
| 2  | raj   | pro-2   | 2          | 324        |
| 3  | ram   | pro-1   | 5          | 656        |
| 4  | ram   | pro-1   | 4          | 23         |
| 5  | ram   | pro-2   | 6          | 44         |
| 6  | kumar | pro-2   | 7          | 345        |
| 7  | kumar | pro-3   | 4          | 222        |

  

Таблица 2

 | id | program | prod_count |
|----|---------|------------|
| 1  | pro-1   | 200        |
| 2  | pro-2   | 120        |
| 3  | pro-3   | 60         |
  

Ожидаемый результат :

  name  | total_calc | total_count |
|-------|------------|-------------|
| raj   | 1540       | 668         |
| ram   | 2520       | 723         |
| kumar | 1080       | 567         |
  

SQL Fiddle —http://sqlfiddle.com /#!9/f75e15

Ответ №1:

Объединяйте таблицы и агрегируйте:

 select t1.name,
       sum(t1.task_hours * t2.prod_count) total_calc,
       sum(t1.task_count) total_count
from Table1 t1 inner join Table2 t2
on t2.program = t1.program
group by t1.name
  

Посмотрите демо версию.
Результаты:

 | name  | total_calc | total_count |
| ----- | ---------- | ----------- |
| kumar | 1080       | 567         |
| raj   | 1540       | 668         |
| ram   | 2520       | 723         |
  

Ответ №2:

Попробуйте это:http://sqlfiddle.com /#!9/eb5f61/1/0

 select
  name,
  sum(task_hours * prod_count) total_calc,
  sum(task_count) total_count
from table1 t1
join table2 t2
on t1.program = t2.program
group by name
order by t1.id
  

Отмечено: task_hours должен иметь тип float.