PHP MySQL:对具有不同值的非整数列进行计数/求和

PHP MySQL:对具有不同值的非整数列进行计数/求和,php,mysql,sql,select,group-by,Php,Mysql,Sql,Select,Group By,我的桌子看起来像这样: ID | click | time | browser 1 1 [01:00:00] FireFox 2 1 [01:00:00] FireFox 3 0 [01:00:00] Opera 4 1 [02:00:00] FireFox 5 1 [02:00:00] Chrome 6 1 [02:00:

我的桌子看起来像这样:

ID | click |    time    | browser

1      1      [01:00:00]     FireFox
2      1      [01:00:00]     FireFox
3      0      [01:00:00]     Opera
4      1      [02:00:00]     FireFox
5      1      [02:00:00]     Chrome
6      1      [02:00:00]     Chrome
01:00:00
Total hits: 3
Clicks: 2

02:00:00
Total hits: 3
Clicks: 3
-----------

FireFox: 3
Chrome: 2
Opera: 1
因此,输出应为:

01:00:00
Total hits: 3
Clicks: 2
FireFox: 2
Opera: 1

02:00:00
Total hits: 3
Clicks: 3
FireFox: 1
Chrome: 2
我知道如何在没有浏览器的情况下获取此信息:

SELECT SUM(click) AS click, COUNT(*), HOUR(time) 
FROM hits 
WHERE time >= DATE_SUB(NOW(),INTERVAL 24 HOUR) GROUP BY HOUR(time)
但我不知道用浏览器输出这个。 如果浏览器不分组,我一点也不介意,我会得到如下输出:

ID | click |    time    | browser

1      1      [01:00:00]     FireFox
2      1      [01:00:00]     FireFox
3      0      [01:00:00]     Opera
4      1      [02:00:00]     FireFox
5      1      [02:00:00]     Chrome
6      1      [02:00:00]     Chrome
01:00:00
Total hits: 3
Clicks: 2

02:00:00
Total hits: 3
Clicks: 3
-----------

FireFox: 3
Chrome: 2
Opera: 1

如果,则可以使用

SELECT SUM(`click`) AS click
     , COUNT(*)
     , HOUR(`time`)
     , COUNT(IF( `browser` = 'Chrome', `browser`, null)) AS `Chrome`
     , COUNT(IF( `browser` = 'Opera', `browser`, null)) AS `Opera`
     , COUNT(IF( `browser` = 'FireFox', `browser`, null)) AS 'FireFox'
FROM `hits` 
WHERE `time` >= DATE_SUB(NOW(),INTERVAL 24 HOUR) 
GROUP BY HOUR(`time`)
案例

SELECT SUM(`click`) AS click
     , COUNT(*)
     , HOUR(`time`)
     , COUNT(CASE WHEN `browser` = 'Chrome' THEN `browser` END) AS `Chrome`
     , COUNT(CASE WHEN `browser` = 'Opera' THEN `browser` END) AS `Opera`
     , COUNT(CASE WHEN `browser` = 'FireFox' THEN `browser` END) AS 'FireFox'
FROM `hits` 
WHERE `time` >= DATE_SUB(NOW(),INTERVAL 24 HOUR) 
GROUP BY HOUR(`time`)

太棒了,谢谢你!但我还有一个问题。我和其他国家也有同样的情况。因此,我不想使用浏览器,而是想计算某个国家的访问量。在“国家”列中,我保存国家代码。但是如果我使用case或者喜欢你的答案,我会有一个巨大的查询。这样的查询也是可能的:
将(国家代码)计数为国家代码
@yoshi:你可以分别获取
小时
浏览器
,然后在循环中,你可以动态构建查询,以获取每个小时(包括每个浏览器)的结果。(两个嵌套的
foreach
循环)。无论如何,这是一个很长的故事,所以你最好自己尝试一下,如果你在php(我猜)和相关查询中遇到问题,就发布一个新的问题。为什么要使用
count()
呢?只说
sum(
browser`='Chrome')要干净得多`以此类推。布尔值被视为一个整数,值为1表示真,值为0表示假。因此
sum()
将计算匹配数。