SQLPLUS (Oracle) - 获取 GROUPBY 的最大计数

SQLPLUS (Oracle) - Get MAX COUNT of GROUPBY

我需要确定哪个月份的条目最多。我使用 TO_DATE 函数将日期列格式化为月。此外,SELECT COUNT(*) 与 GROUP BY 子句相结合,我能够 return 所有记录月份和计数属性。

但是,我只需要 return 一行,即 COUNT 的最大值。 IVE 试图通过添加一个 HAVING 子句来做到这一点,但是 return 出现了一个错误。我怀疑我需要在这里的某个地方进行子查询,但不确定如何去做。

SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT
FROM PET P
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH')
HAVING COUNT = MAX(COUNT);

另一次尝试:

SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT
FROM PET P
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH')
HAVING COUNT(*) = (SELECT MAX(TO_CHAR(P.DATEREGISTERED,'MONTH')) FROM PET P);

下面的代码有效,returns 正确响应。我不清楚它为什么有效,但上述尝试(带别名)没有。

SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT
FROM PET P
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH')
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM PET P GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH'));

在带有别名的查询中,您按月分组并计算记录数,并检查该计数是否与转换为月份字符串的 "date value" 的最大值相同。它们甚至不是同一类型的比较。

您在答案中提供的查询正确比较了双方的计数。

另一种重写查询的方法是

select * from 
(SELECT TO_CHAR(P.DATEREGISTERED,'MONTH') MONTH, COUNT(*) COUNT
FROM PET P
GROUP BY TO_CHAR(P.DATEREGISTERED,'MONTH') order by count(*) desc )
where rownum=1

这里我们按计数的降序对子查询中的记录进行排序,然后从中获取第一行。