如何从嵌套子查询中查找列中的最大值?

问题描述 投票:0回答:1

我有下表

学生证 学生姓名 学生.部门名称 学生.tot_cred
128 ‘张’ '比较。科学。' 102
12345 '香卡' '比较。科学。' 32
19991 “布兰特” ‘历史’ 80
23121 “查韦斯” “金融” 110
44553 “珀耳帖” “物理” 56
45678 “征费” “物理” 46
54321 “威廉姆斯” '比较。科学。' 54
55739 “桑切斯” ‘音乐’ 38
70557 ‘雪’ “物理” 0

问题

我想找到就读学生最多的院系 当它起作用时,我想知道两个院系是否有相同数量的学生,我想输出按字母顺序排列较小的院系名称。

我尝试过的解决方案:

我尝试模仿不包含子查询的解决方案: 如何在 sql 中查找最大值及其关联字段值 这正是我所需要的,但包含了计数子查询。


SELECT sub.dept_name, max_dep
FROM (SELECT student.dept_name, COUNT(student.dept_name) as dep_count
      FROM student GROUP BY student.dept_name) as sub 
WHERE sub.max_dep = (select max(dep_count) from sub )

这会产生语法错误并且不起作用。

chatGPT 也给出了这个代码:


SELECT sub.dept_name, sub.dep_count AS max_dep
FROM (
    SELECT student.dept_name, COUNT(student.dept_name) AS dep_count
    FROM student
    GROUP BY student.dept_name
) AS sub
WHERE sub.dep_count = (SELECT MAX(dep_count) FROM (
    SELECT COUNT(student.dept_name) AS dep_count
    FROM student
    GROUP BY student.dept_name
) AS sub);

这也不起作用。

注意:我正在使用这个网站来检查我的查询(在学生表中)

我也不想使用 ORDER BY 然后限制为 1 行答案,我更喜欢使用

WHERE
子句来检查最大值,但我不确定如何实现它

感谢您的帮助!

sql relational-algebra
1个回答
0
投票

参见示例

select min(dept_name) dept_name,cnt
from (
   select dept_name,count(*) cnt 
   from student 
   group by dept_name
   having count(*)
      =(select max(cnt) 
        from(
             select count(*) cnt 
             from student group by dept_name
            )as counts
       )
)max_depts
group by cnt

子查询

counts
结果为(cnt)(3),(1),(1),(1),(3)。
然后从
counts
中选择max(cnt),结果是(3)。
查询

select dept_name,count(*) cnt 
   from student 
   group by dept_name

输出是

部门名称 cnt
比较。科学 3
金融 1
历史 1
音乐 1
物理 3

子句

having
过滤此输出(子查询
max_depts

部门名称 cnt
比较。科学 3
物理 3

子查询

max_depts
可能有 1 行或多行,其中
cnt
是相同的。
因此,我们按字母顺序按
min(dept_name)
取最小值,并按
cnt
进行分组。
所有行的该值 (cnt) 都相同。因此,我们得到 1 行结果。

select min(dept_name) dept_name,cnt
from ( ... )max_depts
group by cnt
© www.soinside.com 2019 - 2024. All rights reserved.