如何修复此查询?

Posted

技术标签:

【中文标题】如何修复此查询?【英文标题】:How to fix this query? 【发布时间】:2021-03-12 05:36:45 【问题描述】:

我正在尝试选择过去一周中每一天的待处理票证。我有此查询并收到此错误:ORA-00935: 组函数嵌套太深

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),您能分享一下结果吗? 是的,这似乎是问题 问题是调用COUNT() 与数据中的列同名。 【参考方案1】:

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

ORDER BY UPDATED_AT ASC

【讨论】:

【参考方案2】:

如评论和其他答案中所述,您面临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

【讨论】:

【参考方案3】:

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

但是,您将 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() 中的列名前加上表名(或别名)以消除歧义:

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

【讨论】:

以上是关于如何修复此查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复此 BigQuery 表架构的更新查询?

如何修复此 MySQL 查询使其正常工作?

如何修复关于查询中非法字符的 URIException

如何修复“错误 130 (HY000):文件格式不正确”

如何修复“错误 130 (HY000):文件格式不正确”

如何修复此链接列表输出?