基于details表的SQL查询需求:打印指定studid及统计目标学生总数
问题解答
表结构说明
给定的学生信息表结构如下:
details( studid int primary key, fname varchar(20) not null, lname varchar(20) not null, DOB date not null, city varchar(20) );
需求1:输出学生数量大于3的城市中所有学生的studid
提供两种实现方式:
方法1:子查询关联
先统计各城市的学生数量,筛选出学生数超3的城市,再关联原表获取对应学生ID:
SELECT d.studid FROM details d JOIN ( SELECT city FROM details GROUP BY city HAVING COUNT(studid) > 3 ) c ON d.city = c.city;
方法2:窗口函数
通过窗口函数直接计算每个城市的学生总数,再筛选符合条件的记录:
SELECT studid FROM ( SELECT studid, COUNT(studid) OVER (PARTITION BY city) AS city_student_count FROM details ) t WHERE city_student_count > 3;
需求2:统计居住过3个及以上不同城市的学生总数
注:若studid为唯一主键(每个学生仅一条记录),当前表结构无法满足此需求——每个学生仅对应一个城市。以下按学生存在多条居住历史记录的常规场景实现:
通过分组学生ID,统计其关联的不同城市数量,再筛选出符合条件的学生并统计总数:
SELECT COUNT(DISTINCT studid) AS student_total FROM ( SELECT studid FROM details GROUP BY studid HAVING COUNT(DISTINCT city) >= 3 ) t;
内容的提问来源于stack exchange,提问作者Onkar Shinde
相关产品推荐
相关产品推荐

