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
这里我们按计数的降序对子查询中的记录进行排序,然后从中获取第一行。
我需要确定哪个月份的条目最多。我使用 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
这里我们按计数的降序对子查询中的记录进行排序,然后从中获取第一行。