2

以下のクエリを使用して、各ユーザーの実行中のカウントを取得したいと思います

誰も私がこれを行う方法を知っていますか? 削除するwhere user = 1と、グループ化による全体的な実行カウントが得られます。

ユーザー 1 から N までの実行中のカウントを取得したいと考えています。数百万人いるため、ユーザーごとに個別にクエリを実行したくありません。

SET @runtot:=0;
SELECT q1.t, q1.user, q1.c, (@runtot := @runtot + q1.c) AS rt
FROM (
   SELECT
     time AS t,
     user,
     COUNT(distinct `post`) AS c
   FROM
     interactions
   WHERE user = 1
   GROUP BY
     user,time
   ORDER BY
     user
) AS q1
4

1 に答える 1

3

次のクエリを使用できます。

SET @runtot:=0;
SET @last_user:=NULL;
SELECT
  q1.t,
  q1.user,
  q1.c,
  CASE WHEN @last_user=q1.user
       THEN @runtot := @runtot + q1.c
       ELSE @runtot:=q1.c END AS rt,
  @last_user:=q1.user
FROM (
  ...
) AS q1

このクエリは最後のユーザーを@last_user変数に保持し、ユーザーが変更されるたびにカウントを再開します。

于 2013-06-25T22:47:11.470 に答える