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;
我有这些架构 学生(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;