48

好的,所以我有以下查询:

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

我该怎么做呢?

4

1 回答 1

66

您只需将第一个查询编写为子查询(派生表),在括号内,为其选择一个别名(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 ;
于 2013-11-13T21:24:52.380 回答