You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询问题:匹配大小写无关的CS院系并统计学术人员数

解决CS院系学术人员统计问题

首先,先明确你的核心需求:

  • 找出所有名称包含(大小写无关)"Computer ... Science"或"Computing ... Science"的院系(中间允许有其他内容)
  • 输出这些院系的deptnum和对应的学术人员总数
  • 必须使用NATURAL JOIN
  • 结果按deptname字母顺序排序

你现有代码的问题

第一次尝试的问题

SELECT deptnum FROM academic NATURAL JOIN department WHERE UPPER(deptname) LIKE ('%computer science%') OR UPPER(deptname) LIKE ('%computing science%') ORDER BY deptnum;
  1. 匹配逻辑错误:%computer science%要求"computer"和"science"是连续的短语,但需求允许中间有其他内容(比如"Computer Information Science"),所以这种写法匹配不到这类院系
  2. 缺少统计逻辑:只查询了deptnum,没有统计每个院系的学术人员总数
  3. 排序不符合要求:你按deptnum排序,但需求是按deptname字母顺序
  4. 未分组/去重:同一个院系的多个学术人员会导致deptnum重复输出

第二次尝试的问题

你修改后的代码虽然调整了匹配逻辑,但还是没解决统计总数和排序的问题,而且用DISTINCT去重的效率不如分组,分组才是处理这类聚合统计更合适的方式。

正确的查询代码

SELECT deptnum, COUNT(academicid) AS total_academic_staff
FROM academic
NATURAL JOIN department
WHERE (UPPER(deptname) LIKE '%COMPUTER%' AND UPPER(deptname) LIKE '%SCIENCE%')
   OR (UPPER(deptname) LIKE '%COMPUTING%' AND UPPER(deptname) LIKE '%SCIENCE%')
GROUP BY deptnum, deptname
ORDER BY deptname ASC;

关键细节解释:

  • 统计总数:用COUNT(academicid)来统计每个院系的学术人员数量,别名total_academic_staff让结果更直观易读
  • 正确匹配:把"Computer/Computing"和"Science"拆分成两个独立的LIKE条件,并用括号确保逻辑优先级,这样能匹配中间有任意内容的院系名称(比如"Computing Systems Science""Computer and Data Science"等)
  • 分组去重:通过GROUP BY deptnum, deptname确保每个院系只返回一行结果,同时为按deptname排序提供依据
  • 正确排序:ORDER BY deptname ASC严格按照需求的字母顺序排序
  • NATURAL JOIN:满足题目要求的连接方式,它会自动匹配两个表中同名的关联列(这里应该是deptnum)

为什么原代码无结果?

最可能的原因是你的数据库里,符合条件的院系名称中"Computer/Computing"和"Science"之间有其他字符(比如空格以外的词汇),而你第一次的代码要求这两个词连续出现,所以无法匹配到数据。修改后的拆分条件就能覆盖这类情况。

内容的提问来源于stack exchange,提问作者user24529

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:48:42