问题描述
有5张表,分别是登陆记录表,签到记录表,用户积分表,下载记录表,抽奖记录表,这五张表里面都有一个字段-phone,如果用户执行操作登陆、签到、下载动作、执行抽奖,分别会在这四张表里插入一条数据(四个单独的动作),其中用户积分表里面的结构就是用户id,现在积分,两个字段,我如何写一个sql,能查出这种格式的数据,请指教。 电话 登陆次数 签到次数 积分数量 下载次数 抽奖次数135* 5 5 5 5 5138* 5 5 5 5 5180* 5 5 5 5 5
解决方案
select a.phone 电话,count(distinct a.id) 登陆次数,count(distinct b.id) 签到次数,count(distinct c.id) 积分数量,count(distinct d.id) 下载次数,count(distinct e.id) 抽奖次数from 登陆记录表 a,签到记录表 b,用户积分表 c,下载记录表 d,抽奖记录表 ewhere a.phone = b.phoneand a.phone = c.phoneand a.phone = d.phoneand a.phone = e.phonegroup by a.phone
解决方案二:
第一为正解。引用select c.phone 电话, count(a.phone) 登陆次数, count(b.phone) 签到次数, distinct c.现在积分 积分数量, count(d.phone) 下载次数, count(e.phone) 抽奖次数 from 登陆记录表 a, 签到记录表 b, 下载记录表 d, 抽奖记录表 e, 用户积分表 c where a.phone = b.phone and a.phone = c.phone and a.phone = d.phone and a.phone = e.phone group by c.phone这里有个积分的统计。如果每次插入的积分数据是用户当前的积分的话,直接去用户当前积分。如果每次插入的积分数据是用户每登陆一次送的积分的话,那么就得统计该积分数据中,每次送的积分和,如:sum(c.积分)
解决方案三:
select c.phone 电话, count(a.phone) 登陆次数, count(b.phone) 签到次数, distinct c.现在积分 积分数量, count(d.phone) 下载次数, count(e.phone) 抽奖次数 from 登陆记录表 a, 签到记录表 b, 下载记录表 d, 抽奖记录表 e, 用户积分表 cwhere a.phone = b.phone and a.phone = c.phone and a.phone = d.phone and a.phone = e.phone group by c.phone