Борьба за правильное объединение нескольких таблиц для получения правильных данных - PullRequest
0 голосов
/ 07 июня 2011

Ситуация:

У меня есть MySQL 5. Я пытаюсь составить отчет о компаниях и некоторые сведения о прибыли.

  • У каждой компании есть работа, которую мы делаем для них.
  • У каждой работы есть части работы, вовлеченные в эту работу.
  • Каждая часть работы имеет тип задачи

Что я хочу получить:

  • Я хочу знать общую прибыль для каждой компании от всех рабочих мест
  • Общие затраты на каждую компанию со всех рабочих мест
  • Общее количество времени, потраченное на все рабочие места для каждой компании, разделенное на тип работы

таблица компаний:

  • ID
  • имя

таблица заданий:

  • ID
  • company_id
  • Бюджет
  • Расходы

рабочий стол:

  • ID
  • job_id
  • type_id
  • start_time
  • end_time

таблица типов:

  • ID
  • имя
  • hourly_rate

Отношения:

компании --- <вакансии --- <работа> --- типы

Спасибо!

1 Ответ

2 голосов
/ 07 июня 2011

Первые два можно найти по этому запросу:

select
  c.name as company_name,
  sum(hour(end_time) - hour(start_time)) * hourly_rate - sum(costs) as total_profit,
  sum(costs) as total_costs
from companies c
join jobs j on j.company_id = c.id
join work w on w.job_id = j.id
join types t on t.id = w.type_id
group by 1;

последние можно найти по этому запросу:

select
  c.name as company_name,
  t.name as work_type,
  sum(hour(end_time) - hour(start_time)) as total_hours
from companies c
join jobs j on j.company_id = c.id
join work w on w.job_id = j.id
join types t on t.id = w.type_id
group by 1, 2;
...