web-dev-qa-db-ja.com

MySQLのネストされた選択クエリ?

わかりましたので、次のクエリがあります。

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

次に、この結果を次のクエリ内で使用する必要があります。

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

これをどうやってやるの?

40
user2284433

最初のクエリをサブクエリ(派生テーブル)として、括弧内に記述し、そのエイリアス(以下のt)を選択し、列にもエイリアスを作成する必要があります。

DISTINCTは、内部GROUP BYによって冗長になるため、安全に削除することもできます。

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 ;

派生テーブルの行を数えるだけのCOUNTが明らかになったので、それをCOUNT(*)に置き換えて、クエリをさらに簡素化できます。

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