MySQL - 如何按天和小时对数据进行分组

use*_*142 3 mysql pivot

我在获取此示例格式的查询时遇到了一些问题。我的想法是选择当天的小时数并按天分组还是选择所有 7 天并按小时数分组?

这是格式:

在此处输入图片说明

Ric*_*mes 5

我假设您有一个感兴趣的列(dt一个 DATETIME),并且您COUNTing有多少行来获取该表的值?

首先,执行此操作以查看您是否获得正确的值(但不是所需的布局):

 SELECT HOUR(dt), WEEKDAY(dt), COUNT(*)
      FROM tbl
      GROUP BY HOUR(dt), WEEKDAY(dt)
      ORDER BY HOUR(dt), WEEKDAY(dt);
Run Code Online (Sandbox Code Playgroud)

其次,您需要“旋转”表格。但是,您有特定的列。

请参阅http://mysql.rjweb.org/doc.php/pivot了解如何生成旋转代码。

还有一些格式问题...

对于标题,您需要将“0”变成“Mon”等。建议您对标题进行硬编码。

"23" 可以变成 "23:00 - 23:59" 加上CONCAT()一些代码。

NULL可以通过 变成 0 IFNULL()

看看你能走多远。(因为这个问题是 3 周前的,如果你已经离开了,我不想再花更多的力气了。)

就个人而言,我会使用 PHP 而不是 SQL来做(实际上已经做过)类似的事情。PHP 代码更长,但不那么扭曲。