方法一

--- 明细层完成计算,然后再计算所有数值
select uid,round(SUM(score)/count(exam_id),0) avg_score,ROUND(SUM(timezone)/count(exam_id),1) avg_time_took
from 
		(
		select a.uid,a.exam_id,start_time,submit_time,timestampdiff(minute,start_time,submit_time),duration,
		case when a.submit_time is null then duration
		 when timestampdiff(minute,start_time,submit_time)<=duration then timestampdiff(minute,start_time,submit_time)
		 when timestampdiff(minute,start_time,submit_time)>=duration then duration 
		end  timezone,
		score
		from exam_record a
		left join user_info b
		on a.uid=b.uid
		left join examination_info c
		on a.exam_id=c.exam_id
		where `level`=0 and difficulty='hard'
		) t
group by uid


方法二
coalesce 支持多个参数
coalesce(A,B).
A不为null,先返回A,
A为null,返回B
a,B都是null,返回null
select uid,round(SUM(score)/count(exam_id),0) avg_score,ROUND(SUM(timezone)/count(exam_id),1) avg_time_took
from 
		(
		select a.uid,a.exam_id,start_time,submit_time,timestampdiff(minute,start_time,submit_time),duration,
		COALESCE(TIMESTAMPDIFF(minute,start_time,submit_time),duration) timezone,
		
		score
		from exam_record a
		left join user_info b
		on a.uid=b.uid
		left join examination_info c
		on a.exam_id=c.exam_id
		where `level`=0 and difficulty='hard'
		) t
group by uid

方法三
if

select uid,round(SUM(score)/count(exam_id),0) avg_score,ROUND(SUM(timezone)/count(exam_id),1) avg_time_took
from 
		(
		select a.uid,a.exam_id,start_time,submit_time,timestampdiff(minute,start_time,submit_time),duration,
		if(submit_time is null,duration,timestampdiff(minute,start_time,submit_time)  )  timezone,
		
		score
		from exam_record a
		left join user_info b
		on a.uid=b.uid
		left join examination_info c
		on a.exam_id=c.exam_id
		where `level`=0 and difficulty='hard'
		) t
group by uid