如何修复此查询?
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
我正在尝试 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