0

コンテストへの応募用に、次の 3 つの (単純化された) 表があります。

**user**
user_id    

**contest**
contest_id

**contest_entry**
contest_id
user_id

いくつかのコンテストがあり、各ユーザーは各コンテストに 1 回参加できます (contest_entry レコードを作成します)。

これまでに 5 つのコンテストがあったので、0、1、2、3、4、または 5 つのコンテストに参加したユーザーの数を取得したいと思います。私が探している形式の例は次のとおりです。

num_contests_entered      num_users
0                         102
1                         87
2                         345
3                         254
4                         567
5                         489

これを達成するために必要なSQLに完全に困惑しているので、どんな助けも大歓迎です!

ベスト、クリス

編集:明確にするために、私が探しているものの例は

102 users entered 0 contests
87 users entered 1 contest
345 users entered 2 contests 

等..

4

1 に答える 1

2

あなたは書ける:

SELECT num_contests_entered,
       COUNT(1) num_users
  FROM ( SELECT COUNT(ce.contest_id) num_contests_entered
           FROM user u
           LEFT
          OUTER
           JOIN contest_entry ce
             ON ce.user_id = u.user_id
          GROUP
             BY u.user_id
       ) t
 GROUP
    BY num_contests_entered
 ORDER
    BY num_contests_entered
;

サブクエリは、ユーザーごとに、参加したコンテストの数を見つけます。外側のクエリは、その数でユーザーをグループ化し、その数のコンテストに参加したユーザーの数を決定します。

(免責事項:テストされていません。)

于 2012-10-05T15:54:24.763 に答える