如何修复此查询?

How to fix this query?

我正在尝试 select 过去每天待处理的工单 week.I 有此查询并收到此错误:ORA-00935: group函数嵌套太深

SELECT TO_CHAR(UPDATED_AT, 'day') AS WEEK_DAY, COUNT(ID) AS UPDATED_AT
  FROM freshdesk_api
 WHERE UPDATED_AT >= TRUNC(SYSDATE, 'iw')
   AND UPDATED_AT < TRUNC(SYSDATE, 'iw') + 7
   AND STATUS IN (3)
 GROUP BY TO_CHAR(UPDATED_AT, 'day')
 ORDER BY MIN(UPDATED_AT)

问题出在 order by 子句上。我不确定您为什么使用 MIN(UPDATED_AT),但请调查它以解决您的问题。如果您希望按升序排序,只需使用

ORDER BY UPDATED_AT ASC

如评论和其他答案中所述,您遇到了 ORDER BY 的问题。

尝试使用以下技巧对周一至周五的结果进行排序。

SELECT TO_CHAR(UPDATED_AT, 'day') AS WEEK_DAY, 
       COUNT(ID) AS UPDATED_AT, 
       MIN(UPDATED_AT) AS M_UPDATE_DATE -- ADDED THIS AND GAVE IT ALIAS
  FROM freshdesk_api
 WHERE UPDATED_AT >= TRUNC(SYSDATE, 'iw')
   AND UPDATED_AT < TRUNC(SYSDATE, 'iw') + 7
   AND STATUS IN (3)
 GROUP BY TO_CHAR(UPDATED_AT, 'day')
 ORDER BY M_UPDATE_DATE; -- USED ALIAS NAME HERE

据推测,您希望按星期几而不是每天的行数对行进行排序。

但是,您为 COUNT() 添加了与日期列同名的别名,这会导致歧义。使用不同的别名 - UPDATED_AT 无论如何对计数没有意义:

SELECT TO_CHAR(UPDATED_AT, 'day') AS WEEK_DAY, COUNT(*) AS CNT --> here
  FROM freshdesk_api
 WHERE UPDATED_AT >= TRUNC(SYSDATE, 'iw')
   AND UPDATED_AT < TRUNC(SYSDATE, 'iw') + 7
   AND STATUS = 3
 GROUP BY TO_CHAR(UPDATED_AT, 'day')
 ORDER BY MIN(UPDATED_AT)

或者,如果您真的想要结果集中的特定别名,请在 MIN() 中的列名称前加上 table 名称(或别名)以消除歧义:

SELECT TO_CHAR(UPDATED_AT, 'day') AS WEEK_DAY, COUNT(*) AS UPDATED_AT
  FROM freshdesk_api f                     --> table alias
 WHERE UPDATED_AT >= TRUNC(SYSDATE, 'iw')
   AND UPDATED_AT < TRUNC(SYSDATE, 'iw') + 7
   AND STATUS = 3
 GROUP BY TO_CHAR(UPDATED_AT, 'day')
 ORDER BY MIN(f.UPDATED_AT)                --> prefixed column name

备注:

  • 假设id不可为空,count(*)等价于count(id),效率更高

  • STATUS IN (3) 更简单的措辞 STATUS = 3