Как объединить две таблицы со средней функцией и предложением где?SQL - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть две таблицы ниже со следующей информацией

project.analytics 
        | proj_id | list_date  | state  
        |   1     |   03/05/10 |   CA   
        |   2     |   04/05/10 |   WA   
        |   3     |   03/05/10 |   WA   
        |   4     |   04/05/10 |   CA   
        |   5     |   03/05/10 |   WA   
        |   6     |   04/05/10 |   CA   

employees.analytics 
        | employee_id  | proj_id  | worked_date
        |   20         |   1      | 3/12/10    
        |   30         |   1      | 3/11/10         
        |   40         |   2      | 4/15/10     
        |   50         |   3      | 3/16/10     
        |   60         |   3      | 3/17/10     
        |   70         |   4      | 4/18/10   

Какой запрос я могу написать, чтобы определить среднее число уникальных сотрудников, которые работали над проектом в первые 7 дней что он был указан по месяцу и состоянию?

Желаемый результат:

     | list_date | state  | # Unique Employees of projects first 7 day list 
     |   March   |   CA   |   1
     |   April   |   WA   |   2
     |   July    |   WA   |   2
     |   August  |   CA   |   1

Моя попытка

    select 
        month(list_date),
        state_name, 
        count(*) as Projects,
    from projects 
    group by
        month(list_date),
        state_name;

Я понимаю следующие шагидолжны вычесть раб

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Я думаю, что это код, который вы хотите

select
p.list_date, p.state,
emp.no_of_unique_emp 
from project.analytics p
inner join (
  select
  t.project_id,
  count(t.employee_id) as no_of_unique_emp
  from (
    select distinct employee_id, project_id
    from employees.analytics
  ) t
  group by t.project_id
) emp
on emp.project_id = p.project_id
where datediff (p.list_date, getdate()) <= 7  
0 голосов
/ 01 декабря 2018

Вы можете использовать CASE с DISTINCT для расчета уникальных сотрудников, которые работали в течение первых 7 дней после даты list_date.

Как только у вас будет общее количество сотрудников на проект, вы можете рассчитать эти средние значения длямесяц и штат.

SELECT 
 MONTHNAME(list_date) as `ListMonth`,
 state,
 AVG(TotalUniqEmp7Days) AS `Average Unique Employees of projects first 7 day list`
FROM
( 
   SELECT 
     proj.proj_id,
     proj.list_date,
     proj.state,
     COUNT(DISTINCT CASE 
                    WHEN emp.worked_date BETWEEN proj.list_date and DATE_ADD(proj.list_date, INTERVAL 6 DAY)
                    THEN emp.employee_id
                    END) AS TotalUniqEmp7Days
     -- , COUNT(DISTINCT emp.employee_id) AS TotalUniqEmp
     FROM project.analytics proj
     LEFT JOIN employees.analytics emp ON emp.proj_id = proj.proj_id
     GROUP BY proj.proj_id, proj.list_date, proj.state
) AS ProjectTotals
GROUP BY YEAR(list_date), MONTH(list_date), MONTHNAME(list_date), state;

Тест Sql Fiddle можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...