我想返回1个结果,即订单数量最多的年份(日期时间格式),并且我试图在MAX
函数上应用函数COUNT
以获取值。我哪里出问题了?
SELECT TO_CHAR(ODATE, 'YYYY') AS Year
, MAX(COUNT(*))
FROM ORDERS
GROUP BY TO_CHAR(ODATE, 'YYYY')
ORDER BY TO_CHAR(ODATE, 'YYYY');
不确定MAX(COUNT(*))
在这种情况下,是否有效
而是在ORDER
上使用COUNT(*)
并使用ROWNUM
SELECT * FROM
(
SELECT TO_CHAR(ODATE, 'YYYY') AS Year, count(*) AS cnt
FROM ORDERS
GROUP BY TO_CHAR(ODATE, 'YYYY')
ORDER BY cnt DESC
)
WHERE ROWNUM = 1
这将确保您只保留具有最高计数的行:嵌套查询在那里,因为ROWNUM
是在ORDER
发生这种情况之前由Oracle分配的
请注意,在Oracle 12c及更高版本上,可以使用说明FETCH FIRST x ROWS
。这里描述得很好。这允许在没有子查询的情况下执行相同的操作,因为会在FETCH
后面应用ORDER
:
SELECT TO_CHAR(ODATE, 'YYYY') AS Year, count(*) AS cnt
FROM ORDERS
GROUP BY TO_CHAR(ODATE, 'YYYY')
ORDER BY cnt DESC
FETCH FIRST 1 ROWS ONLY;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句