mysql - Mysql GROUP BY 查询。按日期和小时显示数据
问题描述
我有一个名为“counter”的表,它有 3 个字段:
| Field | Type | Null | Key | Default | Extra |
+--------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| record | datetime | YES | | NULL | |
| passed | tinyint(1) | YES | | NULL | |
+--------+------------+------+-----+---------+----------------+
我存储在记录中的数据是这样的(传递的是布尔值):
mysql> SELECT record, passed FROM counter;
+---------------------+--------+
| record | passed |
+---------------------+--------+
| 2019-09-19 00:00:00 | 1 |
我想要做的是一个查询,它总结了多少次传递字段有 1 按小时和日期分组。例如:
Hour | Date | passed
13:00 2019-09-19 10
执行:
SELECT HOUR (record), COUNT(*) as passed FROM counter GROUP BY HOUR(record);
我得到了那些结果
| HOUR (record) | passed |
+---------------+--------+
| 0 | 67 |
| 13 | 199 |
+---------------+--------+
问题是13:00以后有记录,根本没有播。
另外为了获得我尝试过的日期:
SELECT DAY(record), COUNT(*), HOUR(record), COUNT(*) as passed FROM counter GROUP BY HOUR(record);
我得到这个错误
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'iot.counter.record' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
如何归档想要的结果?
解决方案
如果您不介意日期和时间只有一个字段,那么DATE_FORMAT
可以在这里使用:
SELECT
DATE_FORMAT(record, '%Y-%m-%d %H') AS ts,
COUNT(*) AS passed
FROM counter
GROUP BY
DATE_FORMAT(record, '%Y-%m-%d %H');
推荐阅读
- mysql - mysql创建一个由分隔数字组成的列
- powershell - 无法将 System.Object[] 转换为 {System.String, System.Management.Automation.ScriptBlock} 类型
- html - CSS选择表单元素内的输入
- sql - 在按三个字段排序的表上添加顺序索引
- linux - 如何在重定向后通过 wget 获取下载的文件名
- visual-studio - Visual Studio 中的格式化不会修复缩进
- python - 如何在电子邮件中将数据框附加为 excel 并从 python 发送该附件?
- java - 在 WhatApp 聊天中单击电子邮件链接时,如何让我的 Android 应用出现在应用选择器中
- sql - 如何从数据库中另一个表的 SELECT 查询中插入/更新表变量?
- reactjs - React Native Typescript:类型“string”不可分配给类型“solid”| “清楚” | “大纲”'.ts(2322)