SQL 中的最大数量

Maximum number in SQL

我有这些架构 学生(Sid,姓名,城市,Adm_date,论文 1,论文 2)

而且我想找出在哪个日期录取的最大学生人数以及最大学生人数居住的城市。

我在 ORACLE 11g Express Edition 中使用这些查询: 对于城市:

SELECT COUNT(Sid) AS No_of_students, City
FROM STUDENT
GROUP BY City
ORDER BY No_of_students DESC
LIMIT 1;

以及日期:

SELECT COUNT(Sid) AS No_of_students, Adm_date
           FROM STUDENT
           GROUP BY Adm_date
           ORDER BY No_of_students DESC
            LIMIT 1;

但是我在这两个表中都遇到了错误: ORA-00933: SQL 命令未正确结束

请尝试 rownum 子查询(因为 Limit 在 Oracle 中不可用):

城市方面:

select * from 
(SELECT COUNT(Sid) AS No_of_students, City
FROM STUDENT
GROUP BY City
ORDER BY No_of_students DESC) where rownum=1

对于Adm_date明智的:

select * from 
(SELECT COUNT(Sid) AS No_of_students, Adm_date
FROM STUDENT
GROUP BY Adm_date
ORDER BY No_of_students DESC) where rownum=1

找到一篇很好的文章,解释了使用 rownum 选择 top-N 行的机制:

https://blogs.oracle.com/oraclemagazine/post/on-rownum-and-limiting-results

LIMIT 不是 Oracle SQL 方言的一部分。在 Oracle 中,您将使用标准的 SQL FETCH FIRST 子句,但在您使用的旧版本中,该子句也不可用。

无论您采用何种方法,请记住可能存在联系,即不止一个城市或日期具有最大学生人数。所以 LIMIT 1 会跳空。 FETCH FIRST 确实有一个 ties 子句,但如前所述,它在您的旧 Oracle 版本中不可用。

在 Oracle 11g 中,我会使用 window 函数来解决这个问题:

SELECT city, no_of_students
FROM
(
  SELECT
    city,
    COUNT(sid) AS no_of_students,
    MAX(COUNT(sid)) OVER () AS max_no_of_students
  FROM STUDENT
  GROUP BY city
) counted
WHERE no_of_students = max_no_of_students;