MySQL独特且平均

时间:2012-11-10 22:06:19

标签: mysql

以下结构是如何设想此查询。

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分组,因为用户可以拥有多个帐户。任何人都知道我如何在一个查询中实现这一目标?

1 个答案:

答案 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

此外,我不建议将整数用作日期...您应该使用日期数据类型。