如何在PL/SQL中每天分组?

Jas*_*n94 8 sql oracle plsql

我试图用PL/SQL获取每一天的统计数据.

每天有几个条目,错误的bukkets :-)我想按天分组.

我现在在做什么:

SELECT TO_CHAR(dateTime, 'DD') DAY, TO_CHAR(dateTime, 'MM') MONTH, errormessage
FROM log
WHERE (...)
GROUP BY MONTH, DAY, errormessage
Run Code Online (Sandbox Code Playgroud)

这导致ORA-00904:"DAY":无效的标识符(在组上停止).

有帮助吗?:d

Erk*_*lat 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
Run Code Online (Sandbox Code Playgroud)

列别名没有用GROUP BY,你需要完整的表达式.


Luk*_*der 5

你的问题是范围问题。该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
Run Code Online (Sandbox Code Playgroud)

这是另一个:

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
Run Code Online (Sandbox Code Playgroud)

行为不规范

请注意,某些数据库(包括 MySQL、PostgreSQL 等)确实允许从子句中的投影引用列别名GROUP BY。但在更严格的 SQL 方言(例如 Oracle)中,这是不可能的