【问题标题】:SQL: How can i find the max value after a count?SQL:如何在计数后找到最大值?
【发布时间】:2015-11-16 00:53:39
【问题描述】:

喂!

我必须确定哪个月的考试最多。 我的表格看起来:Exams(Exam_id, Student_id, Teacher_id, Subject_id, Course_id, Exam_date, Result_is)。

首先,我要统计每个月的考试次数。我用以下代码做到了这一点:

SELECT SUBSTR(Exam_date, 4, 7) as When, COUNT(SUBSTR(Exam_date, 4,7)) as Count
FROM Exams
GROUP BY SUBSTR(Exam_date, 4, 7)

在此之后,我尝试使用以下代码提取最大值:

SELECT s.When, MAX(s.Count)
FROM(
    SELECT SUBSTR(Exam_date, 4, 7) as When, COUNT(SUBSTR(Exam_date, 4,7)) as Count
    FROM Exams
    GROUP BY SUBSTR(Exam_date, 4, 7)
)s
GROUP BY s.When

但结果是一样的,所以第二部分不起作用。 哪里错了?

非常感谢!

【问题讨论】:

  • 删除外部 SELECT 上的 GROUP BY s.When 会得到什么?
  • 这个错误:ORA-00937: not a single-group group function

标签: sql oracle count max


【解决方案1】:

首先,假设exam_date 是DATE 类型,您可以使用TO_CHAR(exam_date, 'MM') 而不是SUBSTR 来获取月份。

关于您的第二部分,您应该将结果与自身进行比较:

WITH table1 AS 
(SELECT TO_CHAR(exam_date, 'MM') as when, COUNT(TO_CHAR(exam_date, 'MM')) as count
FROM Exams
GROUP BY TO_CHAR(exam_date, 'MM'))
SELECT table1.when FROM table1 WHERE table1.count = (SELECT MAX(count) FROM table1);

【讨论】:

  • 感谢您的帮助。我有个问题。我尝试将您的代码修改为以下内容:SELECT S.when FROM( SELECT TO_CHAR(exam_date, 'MM') as when, COUNT(TO_CHAR(exam_date, 'MM')) as count FROM Exams GROUP BY TO_CHAR(exam_date, 'MM') ) S WHERE S.count = (SELECT MAX(count) FROM S)`为什么我在最后一行(WHERE ....)中出现错误,“表或视图不存在”。我只想很好地了解它是如何工作的。谢谢。
  • 因为视图在您的查询之外并不真正存在。使用子查询分解时,它可用于整个查询。请阅读子查询分解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2020-09-12
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多