web-dev-qa-db-fra.com

Requête imbriquée MySQL?

Ok, alors j'ai la requête suivante:

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

Je dois ensuite utiliser ce résultat dans la requête suivante:

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

Comment pourrais-je m'y prendre?

40
user2284433

Il vous suffit d'écrire la première requête sous forme de sous-requête (table dérivée), entre parenthèses, de choisir un alias pour cette requête (t ci-dessous) et d'alias les colonnes également.

Le DISTINCT peut également être supprimé en toute sécurité car le GROUP BY Interne le rend redondant:

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 ;

Puisque le COUNT est maintenant évident et ne compte que les lignes de la table dérivée, vous pouvez le remplacer par COUNT(*) et simplifier davantage la requête:

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 ;
51
T I