2016-06-01 5 views
0

Ниже мой SQL-запрос ... Мои средние однако не усредняют итоговые значения, а просто показывают SUM. Однако я не знаю, почему. Может ли кто-нибудь дать представление?SQL не работает, как я и ожидал

SELECT 
AVG(a.t1) as '8:00-9:00', 
AVG(a.t2) as '9:00-10:00', 
AVG(a.t3) as '10:00-11:00', 
AVG(a.t4) as '11:00-12:00', 
AVG(a.t5) as '12:00-1:00', 
AVG(a.t6) as '1:00-2:00', 
AVG(a.t7) as '2:00-3:00', 
AVG(a.t8) as '3:00-4:00', 
AVG(a.t9) as '4:00-5:00', 
AVG(a.t10) '5:00-6:00', 
AVG(a.t11) as '6:00-7:00', 
AVG(a.t12) as '7:00-8:00' 
from 
(select COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('07:00:00' AS time) AND CAST('08:00:00' AS time) then 1 end) as t1, 
COUNT(Case when CAST(Request_Datetime AS time)BETWEEN CAST('08:00:00' AS time) AND CAST('09:00:00' AS time) then 1 end) as t2, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('10:00:00' AS time) AND CAST('11:00:00' AS time) then 1 end) as t3, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('11:00:00' AS time) AND CAST('12:00:00' AS time) then 1 end) as t4, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('12:00:00' AS time) AND CAST('13:00:00' AS time) then 1 end) as t5, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('13:00:00' AS time) AND CAST('14:00:00' AS time) then 1 end) as t6, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('14:00:00' AS time) AND CAST('15:00:00' AS time) then 1 end) as t7, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('15:00:00' AS time) AND CAST('16:00:00' AS time) then 1 end) as t8, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('16:00:00' AS time) AND CAST('17:00:00' AS time) then 1 end) as t9, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('17:00:00' AS time) AND CAST('18:00:00' AS time) then 1 end) as t10, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('18:00:00' AS time) AND CAST('19:00:00' AS time) then 1 end) as t11, 
COUNT(Case when CAST(Request_Datetime AS time) BETWEEN CAST('19:00:00' AS time) AND CAST('20:00:00' AS time) then 1 end) as t12 , 
COUNT(Interaction_ID) as dayCount 
from rt_queue_delta 
Where DateName(dw,Request_datetime) in('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') and 
CAST(Request_datetime as Date) >= '05/01/2015' and Department = 1) as a 
+1

Вы написали свой запрос таким образом, чтобы 't1' представлял собой один номер. То же самое для 't2',' t3' и т. Д. –

ответ

0

У вас есть неявное GROUP BY делает отсчеты в подзапрос, а затем вы AVG более отдельных значений (отсчеты), поэтому в основном в вашем опрашивать AVGs нет-OPS.

Выбросьте внешний запрос и рассчитать AVGs вместо подсчетов в подзапрос:

COUNT (CASE WHEN VAL МЕЖДУ ... THEN 1 END)

должен стать

AVG (CASE WHEN VAL МЕЖДУ ... THEN VAL END)

0

Я подозреваю, что запрос, который вы хотите:

select AVG(Case when CAST(Request_Datetime AS time) BETWEEN CAST('07:00:00' AS time) AND CAST('08:00:00' AS time) then 1.0 else 0 end) as t1, 
     . . . 
     AVG(Case when CAST(Request_Datetime AS time) BETWEEN CAST('19:00:00' AS time) AND CAST('20:00:00' AS time) then 1.0 else 0 end) as t12 , 
     COUNT(Interaction_ID) as dayCount 
from rt_queue_delta 
Where DateName(dw, Request_datetime) in ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') and 
     CAST(Request_datetime as Date) >= '2015-05-01' and 
     Department = 1; 

Это возвращает долю от общего количества за каждый период времени. Обратите внимание на использование 1.0 и else 0.

+0

Цифры, похоже, не так правильны. В идеале мне нужно сделать AVG (SUM (вещи в сумме)), но это не разрешено. Вот почему я изначально сделал внешний запрос –

+0

@RobertLouisEverhardII. , , Я не понимаю, зачем нужен 'SUM()'. Возможно, образцы данных и желаемые результаты помогут решить этот вопрос. –

Смежные вопросы