我试图在cd.result ='Pass'的情况下得到大量时间流逝的情况。我不能把它放在哪里,因为我需要其他列出现所有条件,而不仅仅是通过情况。我试图在次选中做到这一点,但似乎需要永远执行(35分钟和计数)。在sql查询中获取一列的平均值
select ctir.item_dbkey, item_id
,ctir.portion_id
,Round(avg(CAST(time_elapsed as float)/1000), 3) as Avg_Time_Sec
,SUM(CASE when cd.result = 'Pass' Then 1 Else 0 END) as N_PASS
,SUM(CASE when cd.result = 'Fail' Then 1 Else 0 END) as N_FAIL
,count(ctir.testassignment_ID)as N_Total
from candidate_testItem_response ctir
join [dbo].[Candidate_TestAssignment_Portion] ctil on ctir.TestAssignment_ID = ctil.TestAssignment_ID and ctir.portion_id = ctil.portion_ID
join item_bank ib on ctir.item_dbkey = ib.item_dbkey
join candidate_data cd on ctir.testassignment_id = cd.TestAssignment_ID and ctir.Portion_ID = cd.Portion_ID
where ctir.portion_id = 15780
and ctil.start_time >= '2017-01-01 00:00:00.000'
group by ctir.item_dbkey, ctir.Portion_ID, item_id
我与子查询的尝试是过于缓慢,并可能最终不会工作:
select ctir.item_dbkey, item_id
,ctir.portion_id
,(select Round(avg(CAST(time_elapsed as float)/1000), 3) as Avg_Time_Sec
from candidate_testItem_response ctir
join candidate_data cd on ctir.testassignment_id = cd.TestAssignment_ID and ctir.Portion_ID = cd.Portion_ID
where cd.result = 'pass')
,SUM(CASE when cd.result = 'Pass' Then 1 Else 0 END) as N_PASS
,SUM(CASE when cd.result = 'Fail' Then 1 Else 0 END) as N_FAIL
,count(ctir.testassignment_ID) as N_Total
from candidate_testItem_response ctir
join [dbo].[Candidate_TestAssignment_Portion] ctil on ctir.TestAssignment_ID = ctil.TestAssignment_ID and ctir.portion_id = ctil.portion_ID
join item_bank ib on ctir.item_dbkey = ib.item_dbkey
join candidate_data cd on ctir.testassignment_id = cd.TestAssignment_ID and ctir.Portion_ID = cd.Portion_ID
where ctir.portion_id = 15780
and ctil.start_time >= '2017-01-01 00:00:00.000'
group by ctir.item_dbkey, ctir.Portion_ID, item_id
,所以我的目标是要增加一列,平均的avg_time_sec对于那些与cd.result ='通过'。我尝试了几个版本,但我很难过。
当它不是'Pass'时,你希望它是什么?你还可以添加一些示例数据来说明你想要做什么?这听起来像你只需要做与'SUM()'列一样的'CASE'逻辑... – Siyual
我只想为通过的人添加一个平均时间的列,而剩下的列。该栏中的不合格人员将被忽略。 –
'Round(Avg(Case when CD.result ='Pass'Then CAST(time_elapsed as float)/ 1000 Else Null End,3))'? – Siyual