MySQL需要使用GROUP BY column_a进行查询,以忽略column_b的重复项

时间:2011-07-19 18:32:20

标签: mysql group-by distinct

我正在尝试获取用户赢得的独特奖品数量的报告。即。玩家如何赢得所有3个奖项,有多少人赢得了2个奖项等等。

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

我需要的报告应该是这样的:

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

以下代码已关闭:

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两次赢得奖金#1,但我不确定如何进一步消除重复。

3 个答案:

答案 0 :(得分:3)

你说

  

玩家如何赢得所有3个奖项,有多少人赢得了2个奖项等等。

  

我需要它忽略那个玩家#1两次获奖#1。

因此,如果玩家不止一次赢得同一奖项,你不应该计算每个奖项的玩家吗?

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

答案 1 :(得分: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

答案 2 :(得分: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