我有一个访客柜台,表格如下:
id | country_code | datetime | Browser | ...
---------------------------------------------------------
1 | FR | 2014-06-20 05:00:28 | FireFox |
2 | US | 2014-06-20 05:00:28 | Chrome |
3 | ZW | 2014-06-20 05:00:28 | IE |
我想计算某一天某小时内有多少访客(例如)。 查询如下所示:
SELECT HOUR(datetime), COUNT(*) as hits
FROM counter_table WHERE datetime >= CURDATE()
GROUP BY HOUR(datetime) WITH ROLLUP
此查询没问题。 但我也想知道我从某个国家有多少游客。
我试过像GROUP BY HOUR(datetime), country_code WITH ROLLUP
这样的东西(我不需要每小时ROLLUP用于国家/地区,我需要每小时ROLLUP用于点击)或JOIN查询但我找不到一个好的解决方案。
我能想到的最好的事情是这样的:
SUM(IF(country_code = "AF", 1,0)) AS Afghanistan,
...
SUM(IF(country_code = "ZW", 1,0)) AS Zimbabwe
但问题是世界上有近400个国家。我不确定上面这么长的查询是否对性能有好处。不幸的是,在这种情况下,性能非常重要,因为表格很大。但除此之外,这个解决方案正是我想要的。
对于这类问题,可能还有比MySQL更好的数据库吗?