以下结构是如何设想此查询。
user_info
- id int(11)
- email varchar(255)
- regdate int(11)
statistics
- id int(11)
- playerid int(11)
- timetopay int(11)
我想要做的就是从user_info获取所有独特的电子邮件,然后获取statistics.timetopay-user_info.regdate的平均值,但是在同一个查询中。
SELECT AVG(s.timetopay-ui.regdate) as time_amount FROM user_info ui
LEFT JOIN statistics s ON ui.id=s.playerid
WHERE s.timetopay>'0' GROUP BY ui.email ORDER BY ui.id DESC LIMIT 1
希望从上面的代码片段中获得要点。我只想弄清楚用户支付一些钱的平均时间,但只有他们有。
上述查询目前对我不起作用。
我不得不使用ui.email分组,因为用户可以拥有多个帐户。任何人都知道我如何在一个查询中实现这一目标?
答案 0 :(得分:1)
这是你要找的吗?
select avg(daystakenavg) from (
select avg(s.timetopay - u.regdate) as daystakenavg
from user_info u
join statistics s on (u.id = s.playerid)
group by email
) t
请注意,如果用户尚未购买,则不会在结果中显示。如果你想要它然后将它改为左连接并添加coalesce
默认为你想要的任何值:
select avg(daystakenavg) totaldaystakenavg from (
select coalesce(avg(s.timetopay - u.regdate), 0) as daystakenavg
from user_info u
left join statistics s on (u.id = s.playerid)
group by email
) t
此外,我不建议将整数用作日期...您应该使用日期数据类型。