-- 需求:每一个日期里面,正常用户发送给正常用户邮件失败的概率是多少
-- 分解为两部分,1、先筛选正常用户,2、按日期分组
SELECT
	e.date,
	round( sum( CASE e.type WHEN 'completed' THEN 0 ELSE 1 END )* 1.0 / count( e.type ), 3 ) AS p -- 失败率=发送失败的/发送总数,结果取三位小数
FROM
	email e
	JOIN user AS u1 ON ( e.send_id = u1.id AND u1.is_blacklist = 0 )
	JOIN user AS u2 ON ( e.receive_id = u2.id AND u2.is_blacklist = 0 )    -- 1、这里直接先筛选掉黑名单用户
GROUP BY
	e.date -- 2、按日期分组
ORDER BY
	e.date; -- 最后按日期排序