我想获得过去一年中每月注册用户的统计信息,因此我构建了此查询
SELECT MONTH(created_at) as m, COUNT(*) as c
FROM users
WHERE created_at >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m')
GROUP BY m
现在我理解MySQL会做的是
created_at
是gte到DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m')
将行添加到临时表,否则忽略它m
c
如果我认为上面所说的是正确的,我关注的是第2点。在一个典型的程序中,如果没有放入变量,if语句中的值将每次计算。
我是否需要将语句DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 12 MONTH), '%Y-%m')
放在变量中并在我的WHERE
子句中引用它以防止它在每一行重新计算,以及如何?
答案 0 :(得分:1)
在执行查询时,将考虑的第一部分是where
子句。在那之后group by
然后它将选择所有那些结果行。
你不需要添加你最后谈到的任何额外变量