MySQL нужен запрос с использованием GROUP BY column_a, чтобы также игнорировать дубликаты column_b - PullRequest
2 голосов
/ 19 июля 2011

Я пытаюсь получить отчет об уникальном количестве призов, выигранных пользователями.то есть.Как игроки выиграли все 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 ]

3 голосов
/ 19 июля 2011

Вы сказали

Как игроки выиграли все 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 
0 голосов
/ 19 июля 2011

Попробуйте это:

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
0 голосов
/ 19 июля 2011
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
...