Pesquisa De Selecção Aninhada Do MySQL?

Ok, então eu tenho a seguinte pergunta:

SELECT MIN(`date`), `player_name`
FROM `player_playtime`
GROUP BY `player_name`

preciso então de usar este resultado dentro da seguinte consulta:

SELECT DATE(`date`) , COUNT(DISTINCT  `player_name`)
FROM  `player_playtime /*Use previous query result here*/`
GROUP BY DATE( `date`) DESC LIMIT 60
Como faria isto?

Author: ypercubeᵀᴹ, 2013-11-14

1 answers

Você só precisa escrever a primeira consulta como um subquery (tabela derivada), entre parênteses, escolher um nome alternativo para ele (t abaixo) e também alias as colunas.

O DISTINCT também pode ser removido com segurança à medida que o GROUP BY interno o torna redundante:

SELECT DATE(`date`) AS `date` , COUNT(`player_name`) AS `player_count`
FROM (
    SELECT MIN(`date`) AS `date`, `player_name`
    FROM `player_playtime`
    GROUP BY `player_name`
) AS t
GROUP BY DATE( `date`) DESC LIMIT 60 ;

Uma vez que o COUNT é agora óbvio que só está a contar as linhas da tabela derivada, você pode substituí - la por COUNT(*) e simplificar ainda mais a consulta:

SELECT t.date , COUNT(*) AS player_count
FROM (
    SELECT DATE(MIN(`date`)) AS date
    FROM player_playtime`
    GROUP BY player_name
) AS t
GROUP BY t.date DESC LIMIT 60 ;
 45
Author: T I, 2013-11-13 21:41:36