【发布时间】:2016-09-06 22:32:36
【问题描述】:
这是我的查询:
SELECT SUM(score) score,
type,
context,
post_id,
e.table_code,
comment_id,
MIN(seen) seen,
MAX(date_time) d_t,
(CASE WHEN FROM_UNIXTIME(MAX(date_time)) >= CURDATE() THEN 'today'
WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesterday'
WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week'
ELSE 'in last month'
END) as range_day
FROM `events` e
WHERE e.id IN ($ids)
GROUP BY type, post_id, e.table_code, comment_id, range_day
ORDER BY seen, MAX(date_time) desc, MAX(e.id) desc
它会抛出这个错误:
#1056 - 无法在“range_day”分组
如果我从GROUP BY 子句中删除range_day,那么它也可以工作。但我还需要根据range_day 对结果进行分组。我该怎么做?
【问题讨论】:
-
range_day是计算列的别名。所以,它不能用于group by。请改用实际计算。 -
在分组时重复你的案例将起作用
-
range_day是使用聚合函数MAX计算得出的。但是不能在 group by 子句中使用聚合函数。 -
@vkp 你是什么意思“实际计算”?是
date_time专栏吗?嗯,这是一个唯一的值(几乎) .. 所以聚合函数不会按预期工作。 -
您所能做的就是将您的查询包装成一个在 GROUP BY 子句中没有 range_day 的子查询。然后按原样在外部查询中使用您的 GROUP BY 子句。但这并不合理,您正在尝试做的事情。你应该描述你想要什么以及为什么。