Q&A for people looking to bypass life's everyday problems with simple tricks
SELECT TagName, cast(ISNULL(DATEDIFF(minute, q.CreationDate, MIN(a.CreationDate)), 9999999) as bigint) TTA into #answers FROM Posts q join PostTags on q.Id = PostId join Tags t on t.Id = TagId left join Posts a ON a.ParentId = q.Id and a.OwnerUserId <> q.OwnerUserId WHERE q.PostTypeId = 1 --and q.CreationDate >= @FirstQuestion AND q.ClosedDate IS NULL AND q.Score >= 0 and a.CreationDate > q.CreationDate and t.TagName in (##tag##) GROUP BY q.Id, q.CreationDate, TagName; with median_answer as ( select TagName, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY TTA) OVER (PARTITION BY TagName) median_tta from #answers ), medians as ( select TagName, -- http://stackoverflow.com/a/8846679/1438 PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ViewCount) OVER (PARTITION BY TagName) median_views, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY AnswerCount) OVER (PARTITION BY TagName) median_answers, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY Score) OVER (PARTITION BY TagName) median_score from Posts p join PostTags on p.Id = PostId join Tags t on t.Id = TagId where PostTypeId = 1 and TagName in (##tag##) ), averages as ( select TagName, count(*) N, avg(ViewCount) avg_views, round(avg(1.0*Score), 1) avg_score, round(100.0*count(ClosedDate)/count(*), 1) closed_rate, round(avg(1.0*AnswerCount), 1) avg_answers, round(100.0*count(AcceptedAnswerId)/count(*), 1) accepted_rate, round(100.0*count(case when AnswerCount > 0 then 1 end)/count(*), 1) answer_rate from Posts p join PostTags on p.Id = PostId join Tags t on t.Id = TagId where PostTypeId = 1 and TagName in (##tag##) group by TagName ) select m.TagName, N, median_views, avg_score, closed_rate, avg_answers, accepted_rate, answer_rate, median_tta from medians m join averages c on c.TagName = m.TagName join median_answer a on a.TagName = m.TagName group by m.TagName, N, median_views, avg_score, closed_rate, avg_answers, accepted_rate, answer_rate, median_tta order by m.TagName