0

ユーザー テーブル、イベント テーブル (都市の場所を含む)、および RSVP テーブル (どのユーザーがどのイベントに参加したか) があります。特定の都市で最も多くのイベントに参加したユーザーを分析したいと考えています。

user_location_counts という新しいテーブルが必要だと思います。このテーブルには、user、location、count という列があります。ここで、count は、特定の都市における特定のユーザーの RSVP の数です。次に、次のようなクエリのみが必要です。

SELECT user FROM user_location_counts WHERE city = 'XYZ' ORDER BY count DESC.

このテーブルを作成する最も効率的な方法は何ですか? それを行うより良い方法はありますか?約 300 万人のユーザーと 1,000 万件の RSVP アイテムがあり、効率が非常に重要です。

4

1 に答える 1

1

次のようなクエリでテーブルを作成できます。

create table User_Location_Counts as
    select r.userId, e.city, count(*) as cnt
    from rsvp r join
         events e
         on e.eventId = r.eventId
    group by r.userId, e.city;

新しいデータが追加されたときにテーブルを最新の状態に保つ必要がある場合は、トリガーが必要になることがあります。または、ラグを許容できる場合は、テーブルを定期的に再構築する必要があります。

于 2013-08-07T02:50:03.390 に答える