Ich versuche, eine Zeit für den Fall verstreichen, wenn cd.result = 'übergeben'. Ich kann es nicht in die Wo-Bedingung schreiben, weil ich die anderen Spalten für alle Bedingungen erscheinen lassen muss, nicht nur Situationen passieren. Ich habe versucht, dies in einem Subselect zu tun, aber es scheint ewig dauern, um auszuführen (35 min und zählen).Erhalten Sie einen Durchschnitt für eine Spalte in SQL-Abfrage
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
meinen Versuch mit subselect der Arbeit viel zu langsam und nicht am Ende ist:
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
so mein Ziel, eine Spalte hinzuzufügen ist, dass der Mittelwert avg_time_sec für die mit der cd.result = 'pass'. Ich habe ein paar Versionen ausprobiert, aber ich bin ratlos.
Was soll es sein, wenn es nicht 'Pass' ist? Können Sie auch einige Beispieldaten hinzufügen, um zu veranschaulichen, was Sie tun möchten? Es hört sich so an, als müssten Sie nur die CASE-Logik verwenden, die Sie mit den Spalten "SUM()" gemacht haben. – Siyual
Ich möchte nur eine Spalte für die durchschnittliche Zeit für Personen hinzufügen, die den Rest des Kanals verlassen haben Säulen. Die Nicht-Pass-Leute würden in dieser Spalte ignoriert werden. –
'Round (Durchschn. (Fall, wenn cd.result = 'Pass', dann CAST (time_elapsed als float)/1000 Else Null End, 3))'? – Siyual