2011-07-19 2 views
2

ユーザが獲得したユニークな賞品のレポートを取得しようとしています。すなわち、MySQLはGROUP BY column_aを使用してcolumn_bの重複も無視するクエリが必要です

+-----------+------------+ 
| prize_qty | player_qty | 
+-----------+------------+ 
|  3 |  1  | 
+-----------+------------+ 
|  2 |  1  | 
+-----------+------------+ 

次のコードは近い:

どのように選手のすべての3つの賞を獲得している、どのように多くは2つの賞、など。

+--------+--------+ 
| player | prize | 
+--------+--------+ 
| 1 | 1 | 
+--------+--------+ 
| 1 | 1 | 
+--------+--------+ 
| 1 | 2 | 
+--------+--------+ 
| 1 | 3 | 
+--------+--------+ 
| 2 | 1 | 
+--------+--------+ 
| 2 | 2 | 
+--------+--------+ 

私は次のようになります。必要なレポートを獲得しています

SELECT DISTINCT COUNT(*) as player_qty, prize_qty FROM 
(SELECT count(*) AS prize_qty FROM `prizes` GROUP BY player) 
as t1 GROUP BY player_qty 

が、それはこの返します

+-----------+------------+ 
| prize_qty | player_qty | 
+-----------+------------+ 
|  4 |  1  | 
+-----------+------------+ 
|  2 |  1  | 
+-----------+------------+ 

賞金1を2回もらったことを無視する必要がありますが、重複をどれほど嫌うかはわかりません。

答えて

3

あなたは、私はそれがする必要がある

何が2つの賞、など。

を獲得しているプレイヤーは、すべての3つの賞を獲得しているどのよう

を、言っその選手を無視する#1が2回賞1を獲得する

プレーヤーが同じ賞を2回以上獲得したという事実を取り除いた後、賞金を1人1つ計上してはいけませんか?

SELECT COUNT(*) AS player_qty, prize AS prize_qty 
FROM 
    (SELECT DISTINCT prize, player FROM prizes) AS T1 
GROUP BY prize 
+0

あなたはちょうど約ありました。最終的な結果はplayer_qty、prize_qty FROM(SELECT count(*)AS prize_qty FRY(SELECT DISTINCT prize、player FROM 'prizes')をt2 GROUP BYプレイヤー)としてSELECT DISTINCT COUNT(*)をGROUP BY prize_qty –

0
SELECT DISTINCT COUNT(*) as player_qty, prize_qty FROM 
(SELECT count(*) AS prize_qty FROM `prizes` GROUP BY player, prize) 
as t1 GROUP BY player_qty 
0

これを試してみてください:

SELECT DISTINCT COUNT(player) as player_qty, prize_qty FROM 
(SELECT count(distinct prize) AS prize_qty, player FROM `prizes` GROUP BY player) 
as t1 GROUP BY prize_qty 
関連する問題