我试图用PL / SQL获取每天的统计数据。
每天都有几个条目,错误信息:-)我想在白天对它们进行分组。
我目前在做什么:
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY MONTH, DAY, errormessage
这导致ORA-00904:“DAY”:无效的标识符(在组中停止)。
有任何帮助吗? :d
答案 0 :(得分:18)
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage
列别名不适合GROUP BY
,您需要完整的表达式。
答案 1 :(得分:4)
您的问题是范围问题。 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)虽然不可能,但
答案 2 :(得分:2)
SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP by TO_CHAR(dateTime, 'DD'), TO_CHAR(dateTime, 'MM'), errormessage
你不能在
组中使用别名