PHP MySQL : COUNT/SUM a non integer column with different values

标签 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:00]     Chrome

所以输出应该是:

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)

但我不知道用浏览器输出这个。 如果浏览器不被分组并且我得到如下输出,我根本不介意:

01:00:00
Total hits: 3
Clicks: 2

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

FireFox: 3
Chrome: 2
Opera: 1

最佳答案

您可以使用IF:

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`)

关于PHP MySQL : COUNT/SUM a non integer column with different values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108199/

相关文章:

javascript - 如何在 chart.js 中使用 JSON 数据?

mysql - Kafka Connect JDBC 连接器查询 + 在初始轮询时使用大数据集增加模式阻塞

sql - 连接表中的多个最大值

php - 错误号 : 2006, MySQL 服务器已消失 codeigniter sql 查询

php - PDO mysqli 查询,制作一个管理页面,可能需要一个变量列名

Javascript 部分代码未发布到数据库

php - 将登录更改为用户后注销

mysql - 列出 MySQL 分类中每个元素的所有属性

mysql - SUM 职位,以便越高越好

mysql - 如何使查询选择记录并且其中一列有两个值并且在两个表之间