我需要确定哪个月的条目最多。我已经使用TO_DATE函数将日期列格式化为MONTH。此外,SELECT COUNT(*)与GROUP BY子句的组合我能够返回所有记录月份和计数属性。
但是,我需要只能返回COUNT的MAX行。 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);
答案 0 :(得分:2)
在带别名的查询中,您按月分组并获取记录数的计数,并且您正在检查该计数是否与"日期值的最大值相同"转换为月份字符串。它们甚至不是同一类型的比较。
您在答案中提供的查询正确地比较了双方的计数。
重写查询的另一种方法是
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
这里我们按照计数的降序对子查询中的记录进行排序,然后从中获取第一行。
答案 1 :(得分:0)
波纹管代码可以正常工作并返回正确的响应。我不清楚为什么它有效,但上述尝试(w /别名)没有。
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'));