2012-10-05 55 views
0

我有一個競賽應用這三個(簡化)表:MySQL的:與競賽的具體數量的用戶選擇條目數量

**user** 
user_id  

**contest** 
contest_id 

**contest_entry** 
contest_id 
user_id 

有幾場比賽,並且每個用戶可以一次輸入每個競賽(創建比賽記錄)。

到目前爲止,已經有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 

等爲例..

+0

@njk你是對的。呃克里斯,什麼是0,1,2,3,4和5? –

+0

修正了這個問題,我覺得它有點含糊! –

回答

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 
; 

子查詢查找每個用戶,他們輸入了多少比賽;外部查詢通過該計數對用戶進行分組,從而確定進入許多比賽的用戶的數量。

(免責聲明:未經測試。)

+0

[似乎沒有](http://sqlfiddle.com/#!2/4541b/1)可以使用。 – Kermit

+0

@njk好吧,你的小提琴表明它的工作原理!唯一缺失的部分(就我的答案而言)是沒有給定參與編號的用戶(您的案例中爲1和3)的行。 –

+0

這對我很有用,非常感謝!我現在將解剖它,並學習一兩件事:) –