-1

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

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

4

1 回答 1

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

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

于 2012-11-10T22:44:31.293 回答