1

複数のユーザーを一覧表示する 1 つのテーブルと、それらのユーザーが行ったすべてのアクション、アクションを行ったユーザーの ID、およびアクションの日付を一覧表示する別のテーブルの 2 つのテーブルを持つデータベースがあります。

各ユーザーが毎月行ったアクションの数を計算しようとしています。これを効率的に行う方法がわかりません:誰か提案はありますか?

4

2 に答える 2

2

を使用して、との両方MONTH()から月を抽出します。DATEGROUP BYMONTHUSER_ID

SELECT u.user_id, MONTH(a.date), COUNT(*) number_of_actions
FROM users u INNER JOIN actions a ON (u.user_id = a.user_id)
GROUP BY u.user_id, MONTH(a.date)

また、ユーザー アクションが複数の年にまたがり、2011 年 1 月と 2012 年 1 月異なるカウントが必要な場合は、両方 でグループ化しYEARMONTH代わりに次のようにします。

SELECT u.user_id, YEAR(a.date), MONTH(a.date), COUNT(*) number_of_actions
FROM users u INNER JOIN actions a ON (u.user_id = a.user_id)
GROUP BY u.user_id, YEAR(a.date), MONTH(a.date)
于 2012-09-23T15:52:06.207 に答える
0

@Joao Silvaの回答が遅すぎる場合は、更新用のトリガーまたはストアドプロシージャを使用して、別のテーブル内の別のテーブルでアクションが発生するため、カウントを維持できます。ディスク ベースのテーブルが遅すぎる場合は、メモリ テーブルを使用してサーバーの再起動時に再構築するか、Redis インスタンスを使用してこの情報を保持することができます。

于 2012-09-23T16:54:52.080 に答える