此表包含按时间戳记的小时订单数:
订单
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))
太慢了。
最佳答案
1。添加一个名为“Day”的字符串列,该列也被编入索引
理想情况下,您应该包含一个日期列,并更新所有行。将日期时间存储为 unix 时间戳并每次都转换它们会导致以下问题:
- 您必须为每一行运行 from_unixtime,然后还要提取日期。
- 您正在牺牲可能与索引列一起正常工作的任何类型的优化。 Unix
时间戳
是数字
,与日期相比,本质上是橙子化。
因此,如果此查询很关键,我会添加一个 day
列,并保存日期和时间戳以获得最大速度。还要为您的日期列编制索引。
2。实验
尝试使用别名表,然后进行分组。我有一种感觉,优化器以这样一种方式进行优化,它可能不会产生任何不同,但您可能会运行 from_unixtime 2 次而不是一次(这需要检查):
选择 天, SUM(项目) 来自(选择 DAY(from_unixtime(created_at)) 作为一天, 项目 FROM 订单) AS temp GROUP BY temp.day
我不确定 from_unixtime
转换是否在 group by
中再次运行。
关于mysql - 如何在Mysql中按天计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41760975/