我有桌子"访客" 这些字段是
id = integer
ip = char
route = char
created_at = timestamp
我想根据小时计算小组数, 我使用了查询
SELECT * , HOUR(created_at) AS created_hour , COUNT(created_hour)
FROM `visitors` WHERE created_at > DATE(NOW()) GROUP BY created_hour
但是我得到了这个错误,我可以"计算"基于" group by"
SQL query: Documentation
SELECT * , HOUR(created_at) AS created_hour , COUNT(created_hour) FROM `visitors` WHERE created_at > DATE(NOW()) GROUP BY created_hour LIMIT 0, 25
MySQL said: Documentation
#1054 - Unknown column 'created_hour' in 'field list'
答案 0 :(得分:3)
将 COUNT(created_hour)更改为 COUNT(*)。
而不是 WHERE created_at> DATE(现在()),使用 WHERE created_at< DATE(NOW())即可。查询中的当前WHERE条件将强制不返回任何内容。
答案 1 :(得分:2)
您在同一SELECT中使用SELECT子句中的别名。这是不可能的,相反,你必须使用它:
SELECT HOUR(created_at) AS created_hour
, COUNT(HOUR(created_at))
FROM `visitors`
WHERE created_at < DATE(NOW())
GROUP BY created_hour
请注意,在MySQL中,确实可以在GROUP BY中使用别名。但它无法在SELECT中使用它。
另请注意,除非您是时间旅行者,否则created_at > DATE(NOW())
确实没有多大意义。
最好使用COUNT(*)
代替COUNT(HOUR(created_at))
,它更具可读性,并且会返回相同的结果。