Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在我的SQL中按天计数_Mysql_Sql_Innodb - Fatal编程技术网

Mysql 如何在我的SQL中按天计数

Mysql 如何在我的SQL中按天计数,mysql,sql,innodb,Mysql,Sql,Innodb,此表包含时间戳中按小时的订单计数: 命令 id, created_at, items 1, 1484827200, 5 2, 1484830800, 10 3, 1484913600, 10 //如何按天计算物品数量? 诸如此类: 2016-01-19, 15 2016-01-20, 10 我的问题是: SELECT sum(items) FROM orders GROUP BY EXTRACT(DAY_HOUR FROM created_at) 这是不对的 SELECT day(from

此表包含时间戳中按小时的订单计数:

命令

id, created_at, items
1, 1484827200, 5
2, 1484830800, 10
3, 1484913600, 10
//如何按天计算物品数量? 诸如此类:

2016-01-19, 15
2016-01-20, 10
我的问题是:

SELECT sum(items)
FROM orders
GROUP BY EXTRACT(DAY_HOUR FROM created_at)
这是不对的

SELECT day(from_unixtime(created_at)), sum(items)
FROM orders
GROUP BY day (from_unixtime(created_at))

太慢了。

我发现一个问题可以帮助您:

答案使用中的一个解决方案

Select
dateadd(S, [unixtime], '1970-01-01')
From [Table]
将unixtime更改为时间戳。 它可以更快。

1。添加一个名为Day的字符串列,该列也被索引 理想情况下,您应该包括一个day列,并更新所有行。将日期时间存储为UnixTimeStamp并每次转换会导致以下问题:

您必须从_unixtime为每一行运行,然后还要提取日期。 您正在牺牲可能对索引列正常工作的任何类型的优化。Unix时间戳是数字,与日期相比本质上是苹果对桔子。 因此,如果这个查询很关键,我只需要添加一个day列,并将日期与时间戳一起保存,以获得最大的速度。也为你的每日专栏编制索引

2.实验 尝试可能使用别名表,然后按进行分组。我有一种感觉,优化器以这样一种方式进行优化,它可能不会产生不同的效果,但您可能会从_unixtime运行2次,而不是一次,这需要检查:

挑选 白天 SUMitems 从选择 DAYfrom\u unixtime创建于, 项目 来自临时工的订单 按临时工作日分组


我不确定from_unixtime转换是否在group by中再次运行

也许这对你有帮助

从表t GROUP BY DATEt.createddatetime中选择COUNT*
如果要按小时求和,请使用此查询

 SELECT id,created_at,SUM(items) FROM orders GROUP BY HOUR(FROM_UNIXTIME(created_at));
如果你想按日期求和

 SELECT id,created_at,SUM(items) FROM orders GROUP BY DATE(FROM_UNIXTIME(created_at));
我喜欢用LEFTdatetime在GROUP上做变体,13。该表达式返回适用于日期+小时的可排序/可分组字符串:

+---------------------+-----------------+
| NOW()               | LEFT(NOW(), 13) |
+---------------------+-----------------+
| 2017-01-20 14:44:42 | 2017-01-20 14   |
+---------------------+-----------------+

当然,如前所述,您需要首先从unixtime转换。

您的标题是按小时计数,但您的解决方案太慢,按天分组。很抱歉,请您在答案周围添加更多上下文。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。