首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【数据库】如何查询选修人数最大的课程号

【数据库】如何查询选修人数最大的课程号

作者头像
三桥君
发布2025-08-28 09:51:22
发布2025-08-28 09:51:22
10900
代码可运行
举报
运行总次数:0
代码可运行

前言: 为了解答“如何查询选修人数最大的课程号?”和“如何查询员工人数最多的部门编号?”的问题,我用尽各种方式搜索,还是没有找到绝对能解释清楚这个问题的答案。在搜索了近百个答案后,我吸收了很多零散的知识点,结合自己的分析,加上尝试N次的情况下,总算理解清楚并解答出来。我将把我梳理清楚的解题思路与知识点写出来,给这乱七八糟的网页内容多一份精确的答案,帮助迷途羔羊们。

一、题目

题目来源:数据库系统原理–实验二 数据库定义与操作语言–习题答案

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)如何查询选修人数最大的课程号?

二、答案

代码语言:javascript
代码运行次数:0
运行
复制
SELECT courseNo
FROM (
	SELECT courseNo,COUNT(studentNo) Snum
	FROM Score
	GROUP BY courseNo) A
WHERE Snum=(
			SELECT MAX(Snum)
			FROM(
				SELECT courseNo,COUNT(studentNo) Snum
				FROM Score
				GROUP BY courseNo) A)
在这里插入图片描述
在这里插入图片描述

三、分析

要解决这道题,我们得先理解文字意思,一个是查询统计选修人数最大,另一个是查询“统计选修人数最大”对应的课程号。

那么,如何去查询这道题呢?我们需要把思路先理清一下。

为了查询到“统计选修人数最大”对应的课程号,我们得先查询到统计选修人数最大;为了查询到统计选修人数最大,我们得先查询到统计选修人数。

所以,我们要解决问题有3个。

  1. 如何查询到统计选修人数?
  2. 如何查询到统计选修人数最大?
  3. 如何查询到“统计选修人数最大”对应的课程号?

解答:

  1. 如何查询到统计选修人数?
代码语言:javascript
代码运行次数:0
运行
复制
SELECT courseNo,COUNT(studentNo) Snum
				FROM Score
				GROUP BY courseNo
在这里插入图片描述
在这里插入图片描述
  1. 查询到统计选修人数最大?
代码语言:javascript
代码运行次数:0
运行
复制
SELECT MAX(Snum)
FROM(
	SELECT courseNo,COUNT(studentNo) Snum
	FROM Score
	GROUP BY courseNo) A
在这里插入图片描述
在这里插入图片描述
  1. 查询到“统计选修人数最大”对应的课程号?
代码语言:javascript
代码运行次数:0
运行
复制
SELECT courseNo
FROM (
	SELECT courseNo,COUNT(studentNo) Snum
	FROM Score
	GROUP BY courseNo) A
WHERE Snum=(
			SELECT MAX(Snum)
			FROM(
				SELECT courseNo,COUNT(studentNo) Snum
				FROM Score
				GROUP BY courseNo) A)
在这里插入图片描述
在这里插入图片描述

四、相关知识点说明

这题用到了sql server 的 COUNT函数、MAX函数、FROM后面可以接查询语句当作虚表。

在这题中,

COUNT函数有生成一个Snum列名,指的是“统计选修人数”的个数;

而MAX函数后面却没有生产新的列名,这是为什么呢?因为在这题中,我们要的是“个数最大”的值,而没用到与最大值新生成的列名,所以可以不用,如果有生产新的列名,那也不影响结果。

FROM后面接的虚表需要把查询语句括号起来,然后用个字母或单词跟在括号后面当作这个虚表的名字。

五、举例练习

题目来源:数据库系统原理–第3章练习–习题答案

题目

现有某公司HR(人力资源)系统的关系模式如下:

Emp (emp_id,ename,age,salary,address)

// 职工(职工编号,姓名,年龄,工资,住址)

Dep (dep_id,dname,address)

// 部门(部门编号,部门名称,部门所在地)

Works(emp_id,dep_id,begin_date, end_date)

// 工作(职工编号,部门编号,开始工作日期,离职日期)

注:Works表记录了职工在不同时间段在公司各部门工作的履历,

如果离职日期(end_date)为空,表明该职工目前仍在此部门工作。

(1)查询员工人数最多的部门编号。

答案

代码语言:javascript
代码运行次数:0
运行
复制
--查询员工人数最多的部门编号。
SELECT dep_id
FROM (--把"查询部门编号和职工编号的人数"当作虚表A
	SELECT dep_id,COUNT(emp_id) Ce
	FROM Works
	GROUP BY dep_id)A
WHERE Ce=(--查询虚表A中职工编号的人数Ce的最大值
		SELECT MAX(Ce)
		FROM (--把"查询部门编号和职工编号的人数"当作虚表A
			SELECT dep_id,COUNT(emp_id) Ce
			FROM Works
			GROUP BY dep_id)A)

注明:

代码语言:javascript
代码运行次数:0
运行
复制
--查询部门编号和职工编号的人数
SELECT dep_id,COUNT(emp_id) Ce
FROM Works
GROUP BY dep_id

如果有更好的方法,在评论区里提出来,供大家参考。如果很有用,我将加进去。

推荐文章

数据库系统概论(基础篇)-笔记

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目
  • 二、答案
  • 三、分析
  • 四、相关知识点说明
  • 五、举例练习
    • 题目
    • 答案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档