-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

うまくいけば、上記のスニペットから要点がわかります。私は、ユーザーがお金を払うのにかかる平均時間を計算しようとしていますが、それは彼らがお金を払っている場合に限られます。

上記のクエリは、現時点ではうまく機能しません。

ユーザーは複数のアカウントを持つことができるため、groupbyui.emailを使用する必要があります。1つのクエリでこれを実現する方法を知っている人はいますか?

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

さらに、int を日付として使用することはお勧めしません...使用する必要がある Date データ型があります。

于 2012-11-10T22:44:31.293 に答える