Суммирование операции над столбцом из подзапроса в SQL - PullRequest
0 голосов
/ 06 сентября 2018

Может быть, мой подход плох.У меня есть следующая схема в моей БД:

work_instances_table(wk_id, wk_occurance_id, start_time, end_time)
time_table(time_id, hour, minute, period)

Несколько work_occurances может быть меньше одного wk_id.Например:

wk_id | wk_occurance_id | start_time | end_time

1     | wk_01           | 111        | 111
2     | wk_02           | 345        | 345
1     | wk_03           | 654        | 655
1     | wk_04           | 132        | 132
2     | wk_05           | 051        | 053

и в time_table мы можем объединить start_time и end_time с time_id.

Предположим, я хочу получить

число всех вхождений работы, которые начались в два раза, скажем, от 0 до 3 часов утра

Я пытался

select w1.wk_id,
      COUNT(w1.wk_occurance_id) as total_wk_occurances 
      from work_instances w1 
      inner join 
          time_dimension td1 on w1.start_time = td1.time_id  
      where 
          (td1.hour between 0 and 3  and td1.minute between 0 and 59 and td1.period = 'AM')
      group by w1.wk_id;

Так что это дает мне

    1  |  2
    2  |  1

1 имеет 2 вхождения, а 2 имеет только 1.

Теперь, как подвести итог?

Означает, как расширить запрос, сказав total 2 works and 3 occurrences ran?

Пожалуйста, объясните и расширите сам исходный запрос, возможно, написав его как подзапрос.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

SELECT COUNT(distinct w.wk_id), COUNT(distinct w.wk_occurance_id)
FROM work_instances_table w
JOIN time_table t ON t.time_id = w.start_time 
WHERE t.hour >= 0 AND t.hour <= 3

В вопросе говорится, что между 0 и 3 утра, так что если это то, что вы хотите, то измените предложение where на что-то похожее на это

WHERE (t.hour >= 0 AND t.hour <= 2 AND t.minute >= 0 and t.minute <= 59)
   OR (t.hour = 3 AND t.minute = 0)
0 голосов
/ 06 сентября 2018

использовать подзапрос и агрегирование

  select count(wk_id) as numberofwork,
  sum(total_wk_occurances) as occurrences   from   
   (  select w1.wk_id,
      COUNT(w1.wk_occurance_id) as total_wk_occurances 
      from work_instances w1 
      inner join 
          time_dimension td1 on w1.start_time = td1.time_id  
      where 
          (td1.hour between 0 and 3  and td1.minute between 0 and 59 and td1.period = 'AM')
      group by w1.wk_id
   ) as  t1

то же самое, что вы можете написать ниже:

with cte as
(
select w1.wk_id,
          COUNT(w1.wk_occurance_id) as total_wk_occurances 
          from work_instances w1 
          inner join 
              time_dimension td1 on w1.start_time = td1.time_id  
          where 
              (td1.hour between 0 and 3  and td1.minute between 0 and 59 and td1.period = 'AM')
          group by w1.wk_id
)  select count(wk_id),sum(total_wk_occurances) as occurrences from cte
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...