您的问题是范围问题。该GROUP BY
子句是语句的表表达式的一部分,因此在SELECT
子句之前进行评估,即投影。这意味着您的投影别名在分组时不可用。这是一种解决方案
SELECT DAY, MONTH, errormessage
FROM (
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
)
GROUP BY MONTH, DAY, errormessage
这是另一个:
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'MM'), TO_CHAR(dateTime, 'DD'), errormessage
非标准行为
请注意,某些数据库(包括 MySQL、PostgreSQL 和其他数据库)确实允许从GROUP BY
子句中的投影中引用列别名。但是,在更严格的 SQL 方言(例如 Oracle)中,这是不可能的