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



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

然而,我需要能够只返回一行,即COUNT的最大值。IVE通过添加HAVING子句声明要执行此操作,但返回错误。我怀疑我需要在这里的某个地方进行子查询,但不确定如何进行。

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);

在使用别名的查询中,您将按Month进行分组,并获得记录数的计数,然后检查该计数是否与转换为Month字符串的"日期值"的最大值相同。它们甚至不是同一类型的比较。

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

另一种重写查询的方法是

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

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

下面的代码工作并返回正确的响应。我不清楚为什么它有效,但上述尝试(带别名)无效。

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'));

最新更新