MySQL按小时查询数据,没有的补0

yizhihongxing

针对MySQL按小时查询数据、没有的补0的问题,我们可以有以下几种方法实现:

方法一:使用IFNULL()和GROUP BY

我们可以使用IFNULLGROUP BY来实现按小时查询数据,并用0填充不存在的数据。具体步骤如下:

  1. 使用DATE_FORMAT()函数将日期时间转换为小时,并作为分组依据;
  2. 使用IFNULL()函数来判断每个小时是否有对应的数据,有则显示数据,没有则显示0;
  3. 最后使用GROUP BY函数来对每个小时的数据进行分组。

示例:

SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:00:00') AS hour, COUNT(id) AS count
FROM my_table
WHERE created_at BETWEEN '2022-01-01 00:00:00' AND '2022-01-01 23:59:59'
GROUP BY hour
ORDER BY hour ASC;

运行结果如下:

 hour               | count
----------------------------
2022-01-01 00:00:00 |    10
2022-01-01 01:00:00 |     0
2022-01-01 02:00:00 |    25
...
2022-01-01 21:00:00 |    15
2022-01-01 22:00:00 |     2
2022-01-01 23:00:00 |     0

注意:如果要完全按小时查询,需要指定时间范围包括跨小时的开始时间和结束时间。

方法二:使用LEFT JOIN和UNION ALL

我们也可以使用LEFT JOINUNION ALL来实现按小时查询数据,并用0填充不存在的数据。具体步骤如下:

  1. 使用一个包含完整小时数据的时间表;
  2. 使用LEFT JOIN将时间表和数据表连接起来;
  3. 使用UNION ALL将小时数据和对应的数据合并成一个结果集;
  4. 使用IFNULL()函数来判断每个小时是否有对应的数据,有则显示数据,没有则显示0。

示例:

SELECT DATE_FORMAT(h.h, '%Y-%m-%d %H:00:00') AS hour, COUNT(t.id) AS count
FROM (
    SELECT '2022-01-01 00:00:00' + INTERVAL n HOUR AS h
    FROM (
        SELECT 0 AS n
        UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
        UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
        UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15
        UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20
        UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23
    ) hours
) h
LEFT JOIN my_table t ON DATE_FORMAT(t.created_at, '%Y-%m-%d %H') = DATE_FORMAT(h.h, '%Y-%m-%d %H')
WHERE h.h BETWEEN '2022-01-01 00:00:00' AND '2022-01-01 23:59:59'
GROUP BY hour
ORDER BY hour ASC;

运行结果如下:

 hour               | count
----------------------------
2022-01-01 00:00:00 |    10
2022-01-01 01:00:00 |     0
2022-01-01 02:00:00 |    25
...
2022-01-01 21:00:00 |    15
2022-01-01 22:00:00 |     2
2022-01-01 23:00:00 |     0

注意:这种方法较为繁琐,但是可以适用于任意时间范围的查询,并且可以保证小时数据完全正确。

以上就是实现MySQL按小时查询数据、没有的补0的两种方法,你可以根据实际情况选择合适的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL按小时查询数据,没有的补0 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • mysql查询的控制语句图文详解

    MySQL 是一种常用的关系型数据库管理系统,提供了多种查询数据的控制语句,查询控制语句是 MySQL 最常用的功能之一。本文将详细讲解 “MySQL 查询的控制语句图文详解”,以帮助读者更好地掌握 MySQL 数据库查询的技能。 1. 查找表数据 可以使用以下命令来查找表中数据: SELECT columns FROM table_name WHERE c…

    database 2023年5月21日
    00
  • SQL Server中的T-SQL的基本对象

    T-SQL是SQL Server中的一种编程语言,包含了丰富的基本对象,涵盖了数据库的各个方面。本文将详细讲解T-SQL的基本对象,并通过示例说明。 数据库对象 数据库(Database) 数据库是SQL Server中最基础的对象,它是数据在其中存储和管理的地方。可以通过创建和使用数据库对象来操作和管理数据库中存储的数据。 –创建一个名为mydataba…

    database 2023年5月21日
    00
  • SQL 在运算和比较中使用Null

    当在SQL中使用Null时,需要注意以下几点: Null不能直接用于算术运算符(如加法、减法等)或连接运算符(如’+’、’||’)中。如果要进行这类运算,必须使用特殊的函数,例如COALESCE、NVL、IFNULL、NULLIF等。 在SQL中,Null的特殊值与其他值不相等,因此在比较和排序时需要特别注意。 下面是两个实例,展示在SQL中如何在运算和比较…

    database 2023年3月27日
    00
  • php安装redis扩展过程介绍

    下面是详细的php安装redis扩展过程介绍攻略。 安装Redis扩展前的准备工作 在安装Redis扩展之前,需要先保证已经安装了Redis服务器,可以通过以下命令检查Redis是否已经安装: redis-cli ping 如果输出为PONG,则表示Redis服务器已经启动,在此基础上开始安装Redis扩展。 安装Redis扩展 步骤1:下载Redis扩展源…

    database 2023年5月22日
    00
  • mysql 5.7.20 win64 安装及配置方法

    MySQL 5.7.20 Win64 安装及配置方法 安装 首先,从MySQL官网下载MySQL 5.7.20的Windows 64位安装程序。下载完成后双击运行安装程序。 在安装向导的第一步中,选择“Custom”(自定义)安装选项。 在第二步中,可以选择你要安装的MySQL组件,选中你所需要的组件即可。在此我选中了“MySQL Server”、“MySQ…

    database 2023年5月22日
    00
  • 数据库开发总结(ADO.NET小结)

    数据库开发总结 (ADO.NET小结) 是一篇介绍 ADO.NET 的文章,本文将为你提供详细的攻略。 ADO.NET 简介 ADO.NET 是一种用于访问数据源的技术,它能够让我们轻松地访问多种数据源,如数据库、XML 文件等。ADO.NET 提供了一组数据访问技术,包括连接、命令、读取和写入数据等操作,具有高性能和可扩展性。 ADO.NET 中的核心对象…

    database 2023年5月21日
    00
  • MySQL中对查询结果排序和限定结果的返回数量的用法教程

    下面是MySQL中对查询结果排序和限制结果返回数量的用法教程完整攻略: 排序查询结果 在MySQL中可以使用ORDER BY语句来对查询结果进行排序。ORDER BY语句必须放在查询语句的最后,后面紧跟着排序的列名以及可选的排序方式(升序或降序)。 以下是ORDER BY语句的基本语法: SELECT column1, column2, … FROM t…

    database 2023年5月22日
    00
  • MySQL 查询 并集、交集、差集方式

    下面我来对MySQL查询中并集、交集、差集的使用方法进行讲解。 什么是并集、交集、差集 在介绍相关的MySQL查询语句之前,我们先来了解一下这三个概念: 并集:两个集合中的所有元素在合并后仍然是唯一的。 交集:两个集合中共同拥有的元素组成的集合。 差集:指包含在集合 A 但不包含在集合 B 中的元素。 MySQL查询语句 并集查询 并集查询使用UNION关键…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部